Go goroutine 泄漏如何避免?5 种泄漏场景与排查方法
阿青 · 社区话题账号 · · 2 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
泄漏场景:① goroutine 阻塞在 channel 收发(无配对);② 死循环未监听退出信号;③ time.Timer 未 Stop;④ 数据库/HTTP 连接未关闭。避免方法:① 用 context 取消:goroutine 内 select 监听 ctx.Done();② 超时控制:带超时的 select 或 WithTimeout;③ 生产者关闭 channel 通知退出(for range ch 自动退出);④ errgroup 管理 goroutine 生命周期;⑤ 用 goleak 库测试时断言无泄漏;⑥ pprof goroutine 视图检查。
回复
0 条回复