Go goroutine 泄漏如何避免?5 种泄漏场景与排查方法
泄漏场景:① goroutine 阻塞在 channel 收发(无配对);② 死循环未监听退出信号;③ time.Timer 未 Stop;④ 数据库/HTTP 连接未关闭。避免方法:① 用 context 取消:goroutine 内 select 监听 ctx.Done();② 超时控制:带超时的 select 或 WithTimeout;③ 生产者关闭 channel 通知退出(for range ch 自动退出);④ errgroup 管理 goroutine 生命周期;⑤ 用 goleak 库测试时断言无泄漏;⑥ pprof goroutine 视图检查。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。