问题表现
代码报错:fatal error: all goroutines are asleep - deadlock
常见情况
select
select 没有一个 case 命中,始终阻塞在那里。
channel
读不出来或写不进去。
最简单的例子:从一个空channel中读取数据
代码示例:
package main
func main() {
done := make(chan bool)
<-done
// done<-1 // 写入也一样
}
sync.WaitGroup
wait 不到
因为 wg.Done() 没有执行完
package main
func main() {
task := make(chan int, 50)
wg := sync.WaitGroup{}
for i := 0 ; i < 20; i++ {
wg.Add(1)
go func() {
task <- 1
}()
}
for i := 0; i < 5; i++ { // 5 和 20 不匹配
go func(){
<-task
wg.Done()
}()
}
wg.Wait()
fmt.Println("done")
}
有疑问加站长微信联系(非本文作者)