Go 中 channel 用错导致死锁的三种常见写法,以及如何用 select 和 context 规避
超哥前端记录
发布于 2026-10-28 08:30:44
发布于 2026-10-28 08:30:44
680
举报
概述
写 Go 并发代码时,channel 的阻塞特性很容易让程序在没有任何报错的情况下直接挂死,表现为 fatal error: all goroutines are asleep - deadlock!。这种问题在服务启动、任务分发、优雅退出等场景里出现频率很高,尤其是当生产者与消费者的数量不匹配、或者某个分支忘记从 channel 取数据时。文章从三个真实的代码片段出发,分析死锁的触发条件,并给出