一
func main() {
c1:= make(chan any)
<-c1
}
上面代码运行肯定会报deadlock的死锁错误,但是下面这样,如果有一个协程一直在运行,则不会报错,大致就是因为协程还在运行,所属主协程main不确定是否会往管道c1中写数据,所以就会一直阻塞在这里,上面的代码块或者没有一直执行的协程,那main就会知道不会再往管道c1中写数据了,就会报错(当然是个人理解,未找到具体的相关资料)
func main() {
go func() {
for {
fmt.Println(11)
time.Sleep(1 * time.Second)
}
}()
c1:= make(chan any)
<-c1
}
标签:协程,chan,golang,管道,报错,func,c1,main,channel
From: https://blog.csdn.net/zuoye1010/article/details/141172164