原文地址:go deadlock作者:funkygao
上面的代码,在执行时会报:
throw: all goroutines are asleep - deadlock!
原因是:
ch <- 5,是unbufferedchannel,它会block,直到有人把它发送的消息取走。因此,第6行的语句永远无法执行,造成死锁
go判断死锁的代码位于:
src/pkg/runtime/proc.c
解决办法有2:
1. 把第4行修改为:
ch := make(chan int, 1) // buffered channel
2. 创建新的goroutine来执行
有疑问加站长微信联系(非本文作者)