一、Goroutine 泄露的核心条件(必背)
Goroutine 泄露 = 启动后永远无法退出、无法被 GC 回收 满足以下任意一条就会泄露:
- Goroutine 内部发生永久阻塞,无法被唤醒
- Goroutine 陷入死循环,没有任何退出条件
二、最常考的 4 大泄露场景(99% 面试问这些)
1. Channel 阻塞(最常考)
- 无缓冲 channel 发送 / 接收,没人配对
- 有缓冲 channel 满了还发、空了还收
- channel 永远不关闭,导致一直阻塞
2. 锁永久拿不到
- sync.Mutex 被持有且永不释放
- 其他 goroutine 一直阻塞在 Lock ()
3. WaitGroup 误用
- Add (1) 但忘记 Done ()
- Wait () 永远等不到计数器归零
4. 死循环 + 无退出条件
- 无限 for 循环
- 没有 ctx.Done ()、没有 break、没有关闭信号
三、一句话总结(面试收尾金句)
Goroutine 泄露的本质:启动后无法执行到 return,永久阻塞或永久死循环。