defer 的成本和可读性:哪些热路径要注意
defer 的首要价值是让释放动作靠近申请动作。文件关闭、锁释放、事务回滚,用 defer 往往比手动分支更不容易漏。
但在极高频循环里,defer 可能带来额外开销,也可能把释放时机拖到函数结束。比如批量处理每一行数据时,把 defer 放在循环内部就需要小心。
for rows.Next() {
if err := handleRow(); err != nil {
return err
}
}
return rows.Close()我的默认策略是:普通业务代码优先可读性,热路径在压测或 pprof 证明有问题后再改。不要凭印象优化,也不要把所有 defer 都手动展开。
工程里真正危险的不是 defer 慢,而是资源释放路径不一致。性能问题可以量化,泄漏问题往往上线后才暴露。
版权申明
本文系作者 @blogger 原创发布在defer 的成本和可读性:哪些热路径要注意。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论