SuperAPI AI 工具集

agh-cleanup-failure-paths

编程与开发

查看项目

更新于 10-15 20:27

技能介绍

用途:在编辑任何会创建或扩展 context、注册资源、打开连接或启动子进程的 Go 函数前,审计其清理纪律。资料提到,Hermes review issue #001 曾因注册失败时 procCtx 泄漏导致一次 PR 返工,该技能用于避免同类部分失败路径的资源泄漏。

主要能力与步骤:一,识别初始化步骤边界,枚举 context 创建、文件打开、监听绑定、注册、租约申请、启动 goroutine/子进程、HTTP 请求、加锁、开启事务等,并配对 cancel、Close、Unregister、Release、Stop、defer cancel、tx.Rollback 等清理动作,可参考 references/cleanup-table.md。二,遍历每条 error 返回,确认返回点上方分配的资源都已清理,仅成功路径清理即为泄漏;panic 恢复与 runtime.Goexit 由 defer 覆盖。三,应用 defer 相邻规则:WithCancel/WithTimeout/WithDeadline 后紧跟 defer cancel;os.Open、net.Listen、db.Begin 等后紧跟 defer Close 或 defer tx.Rollback;goroutine 配合 WaitGroup 与 defer wg.Done;子进程用可响应 proc.Done 与 ctx.Done 的延迟 Stop。四,分离生命周期纪律:超出请求的工作用 context.WithoutCancel 分离,写响应循环仍绑定请求 context;该函数不保留 deadline,需要时用 WithDeadline 重新附加,并暴露显式取消入口。五,出站调用卫生:生产路径禁用 http.DefaultClient,须显式超时,响应体先 io.Copy(io.Discard, resp.Body) 再 Close。六,为每个错误返回编写或扩展测试,触发确切失败并断言清理发生,优先用接口 mock 而非运行时故障注入,可参考 references/test-failure-paths.md。

限制与处理:函数过大时分段审计,仅审计正在编辑的函数,跨函数清理由调用方负责;清理所需资源不在作用域时,应上移责任或重构为返回 cleanup func();既有函数缺少错误路径清理时标记为技术债,仅补所编辑路径并记录其余;defer 过多(如超过 6 个)建议拆分函数。资料未提供安装命令、平台与价格信息。