【发布时间】:2021-09-28 22:23:28
【问题描述】:
这个程序输出:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/home/user/go/src/examples/run/chan1.go:51 +0xa9
但是注释第 5 行 c <- 1 和取消注释第 9 行 //c <- 1(或第 8 行 - 好的,这很有意义)没有问题。这是管理渠道的意义还是困难
func main() {
c := make(chan int)
q := make(chan int)
w := make(chan int)
c <- 1
go func() { q <- <-c}()
go func() { w <- <-q}()
// go func() {c <- 1}()
//c <- 1
fmt.Println(<-w)
}
【问题讨论】:
-
c <- 1阻塞,直到从c接收到某些东西,但是由于还没有初始化从c接收它,它将永远阻塞,即第 6 行及以上的行将不会被执行。 -
但
fmt.Println(<-w)执行 -
不,doesn't。
c <- 1执行后什么都没有。 -
API server listening at: 127.0.0.1:21797 1 Process exiting with code: 01 来自哪里 -
@ebasruh 显示的代码不会打印该输出。