У меня есть небольшой фрагмент кода, подобный этому
func main() {
var c chan string
go func() {
c <- "let's get started"//write1
//c <- "let's get started"//write2
//c <- "let's get started"//write3
fmt.Println("wrote the stuff....")
}()
//time.Sleep(3 * time.Second) //adding this always shows fatal exception
c = make(chan string)
fmt.Println(<-c)
}
Я не вижу вывод wrote the stuff....
на консоли, если я раскомментирую строки фрагментов кода //write2
и write3
.Я понимаю, что, вероятно, я не вижу этого, потому что канал небуферизован и полностью синхронен, и за пределами канала происходит только одно чтение.Однако при выходе из программы подпрограмма go блокируется, почему нет ошибки типа deadlocked...
или чего-то такого, что я вижу в этом случае?