读取 go channel 为什么直接死锁?
开始学习 go channel 的姿势, 为什么下面这段代码运行时直接报死锁错误.
// main.go
package main
func main() {
ch := make(chan int)
defer close(ch)
<-ch
}
报错信息如下:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
E:/projects/godemo1/main.go:7 +0x8d
没看明白为什么直接报错?
我个人的理解是:不论是 有缓冲通道还是无缓冲通道,通道中任意一方永久性阻塞,就会引发死锁错误。