Go channel 死锁场景盘点:如何快速定位与避免
死锁:所有 goroutine 都阻塞且无法解除,运行时报 fatal error: all goroutines are asleep - deadlock!。常见:① 无缓冲 channel 只发不收或只收不发;② 主 goroutine 阻塞等子 goroutine,子 goroutine 又在等主 goroutine 数据;③ 忘记 close 导致 range 永不退出(不算死锁但泄漏);④ 锁 + channel 混用循环等待。排查:看堆栈找阻塞点、检查收发配对、加超时 select 兜底、用 go vet 检查部分静态问题。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。