идее, после отправки значения в ch1, главная горутина заблокируется и управление передастся во вторую, где будет считано значения и выведено две строки. После, управление вернется в главную и выведется оставшийся Println. Но порой, вывод может быть вот таки:
GO: get from chan
MAIN: after put to chan
GO: after read from chan
и даже таким
MAIN: after put to chan
GO: get from chan
GO: after read from chan
Все зависит от планировщика и впринципе такая смена контекста это норма ?
а в каком месте "главная горутина заблокируется"?
может я к вечеру совсем уже в глаза устал, но у меня там такой код package main import "fmt" func main() { ch1 := make(chan int) go func(in chan int) { val := <-in fmt.Println("GO: get from chan", val) fmt.Println("GO: after read from chan") }(ch1) ch1 <- 42 fmt.Println("MAIN: after put to chan") fmt.Scanln() }
извиняюсь, поправил сообщение выше
Таким кодом можно проверить лишь то, что горутина работает. Очередность так проверить нельзя.
Обсуждают сегодня