我们学习通道channel的时候,偶尔会在测试的时候遇到 all goroutines are asleep
这样的panic错误,但是这个是怎么造成的呢。本文首先会介绍产生这个的原因,然后会结合具体案例进行详细分析。
错误原因
这个错误其实已经写的比较明白了,所有的 协程(goroutines)都处于休眠(阻塞)状态
。当所有协程都处于阻塞状态的时候,那所有的协程都等不来解锁的那一天了,出现死锁,所以golang调度直接把这个给kill掉了。
简单来说出现这样的原因是主线程在阻塞,但是其他协程由于各种原因也阻塞了。
下面分享几个学习中遇到的案例
案例详解(持续更新)
案例一
代码如下:
package main
import (
"fmt"
"time"
)
func service1(ch ch