Serhioromano
@Serhioromano
Web Developer

Почему этот код работает как я ожидаю?

Что именно работает не так как я ожидаю. Я новичек в GO.

У меня есть луп бесконечный который я запускаю и останавливаю отправляя в канал m[1] сообщение. Но вот что не понятно, я передаю go loop(m[1]); не по ссылке как я понимаю. Почему когда я шлю в m[1] сообщение оно попадает в луп который был вызван до той стройки где я сообщение отпраляю.

Я думал что такое нужно вызывать с & или подобным.

package main

import (
	"fmt"
	"time"
)

func loop(quit chan bool) {
	n := 0
	for {
		select {
		case <-quit:
			break
		default:
			// do stuff. I'd call a function, for clarity:
			fmt.Println(n)
			time.Sleep(500 * time.Millisecond)
			n++

		}
	}
}

func main() {
	m := make(map[int]chan bool)

	m[1] = make(chan bool)
	go loop(m[1]);
	time.Sleep(2 * time.Second)
	m[1] <- true
}
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 1
@anaxita
Потому что после отправки сообщения true в канал - функция (горутина) main завершается и приложение (все) останавливается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы