У меня есть код, в котором я пытаюсь распечатать содержимое канала в программе с помощью fmt.Println. Вот упрощенная версия кода.
package main
import "fmt"
import "time"
func main() {
ch := make(chan int)
go fmt.Println(<-ch);
ch<- 10;
time.Sleep(time.Second * 10);
}
Когда я запускаю приведенный выше код, я получаю эту ошибку.
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
C:/cygwin64/home/vmadhusudana/go/channel.go:9 +0x67
exit status 2
Однако он работает нормально, когда я вызываю fmt.Println из функции
package main
import "fmt"
import "time"
func main() {
ch := make(chan int)
go func(){fmt.Println(<-ch)}();
ch<- 10;
time.Sleep(time.Second * 10);
}
Что здесь меняет?