golang 无缓冲channel的死锁问题?
package main
import "fmt"
func main() {
// 初始化channel
// channel在使用之前,必须进行make初始化
// 否则,它会是一个nil
ch := make(chan int)
// fmt.Println(ch)
// 输出channel
go func() {
fmt.Println(<-ch)
}()
// 输入channel
ch <- 1
// 关闭channel
close(ch)
fmt.Println(ch)
// ch <- 2
<-ch
}
这样运行是ok的。为什么把ch <- 1 挪到 go func() {
fmt.Println(<-ch)
}()前就报错 死锁尼
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
无缓冲通道,在没有取之前会一直会阻塞。写在go func() 前,main方法阻塞,无法执行到go func(),ch永远不会被取数据,所以造成了死锁。