用途:这是一套 Go 防御性编码规范,针对 Go 无异常、类型系统无 null 安全的特点,列出能通过编译与评审却在生产环境出错的常见陷阱,用于写代码时加固或审查既有代码。
主要能力:覆盖 typed-nil 接口(非 nil 接口持有 nil 指针)、nil map/slice/channel 行为差异、切片别名与底层数组保留、边界处防御性拷贝、含 mutex 或 atomic 的结构体禁止拷贝、数值窄化转换的溢出检查、浮点与 time.Time 比较、循环内 defer 的资源泄漏、零值可用性与初始化安全。审查模式按严重度(panic 或损坏、潜在缺陷、风格)报告并标注 file:line。
使用方式:分 Harden(写改代码时逐条应用)与 Review(审计现有代码)两种模式。按需加载 references/nil-and-aliasing.md 与 references/numeric-safety.md。建议配合工具执行:go vet ./...、golangci-lint run、gosec -include=G115,G104,G601 ./...、go test -race ./...。相关 linter 包括 errcheck、bodyclose、sqlclosecheck、rowserrcheck、makezero、nilerr、exhaustive 及启用 nilness 的 govet。
适用场景:Go 项目开发与代码评审,尤其是涉及接口错误返回、切片子视图传递、数值转换、并发锁与资源关闭的代码。
限制:资料未提供安装命令、收费方式与平台信息;工具未安装时需跳过并注明。Go 1.22 起每次循环迭代有独立变量,旧写法需按模块版本处理。