此代码运行并结束,没有死锁错误。为什么?
func main() {
ch := make(chan int)
go func() {
ch<-1
ch<-2
}()
time.Sleep(time.Second)
}
答案 0 :(得分:2)
未缓冲的通道需要两个端点才能工作,所以让我们从正确的示例开始:
package main
func main() {
go fun2()
<-ch
<-ch
}
func fun2() {
ch <- 1
ch <- 2
}
var ch = make(chan int)
这里fun2()
发送两个值,main()
接收两个值。
您的示例代码只有一个端点,因此通道构造不正确,因此它是死锁,但是main
goroutines正常退出,因此您看不到错误。在这里,没有第二个终点,所以这是死锁:
package main
func main() {
var ch = make(chan int)
ch <- 1
}
输出:
fatal error: all goroutines are asleep - deadlock!