SuperAPI AI 工具集

go-error-handling

写作与研究

查看项目

更新于 10-15 20:30

技能介绍

用途:在编写返回、包装或处理错误的 Go 代码时提供规范参考,帮助在哨兵错误、自定义类型与 fmt.Errorf 之间做选择,并组织错误处理流程。兼容性:errors.Is、errors.As 与 %w 包装需 Go 1.13+;结构化日志示例可能使用 Go 1.21+ 的 log/slog。

主要能力与规则:不要从导出函数返回具体错误类型,应返回 error 接口,避免具体 nil 指针变成非 nil 接口;错误字符串不应首字母大写、不应以标点结尾(导出名、专有名词、缩略语例外);出错时调用方应将非 error 返回值视为未指定;不要用 _ 丢弃错误,需明确选择立即处理、返回给调用方(可用 %w 附加上下文),或在特殊情况下 log.Fatal/panic,故意忽略要加注释说明;避免带内错误(如返回 -1 表示缺失),改用多返回值;错误优先、提前返回以保持正常路径不缩进;错误只处理一次,要么记录要么返回,不要两者都做;用 %v 在系统边界、日志或隐藏内部细节时包装,用 %w 保留错误链供 errors.Is/errors.As 使用,%w 放在格式串末尾,若无增益则直接返回 err。

使用方式:资源路由包括 scripts/check-errors.sh,用于检查基于字符串的错误匹配、裸错误传播和先记录再返回等模式;scripts/check-errors-ast.go 为其实现辅助,修改错误流分析行为时打补丁;references/ERROR-FLOW.md 用于决定在哪处理、包装、记录或返回错误;references/ERROR-TYPES.md 用于选择哨兵错误、类型化错误或不透明错误;references/WRAPPING.md 用于选择 %w 与 %v 或跨包边界。验证:实现后运行 bash scripts/check-errors.sh 检测常见反模式,再运行 go vet ./... 捕获其他问题。相关技能:go-naming、go-testing、go-defensive、go-control-flow、go-logging。限制:未提供具体安装命令、收费或平台信息。