SuperAPI AI 工具集

go-strict

编程与开发

查看项目

更新于 10-13 15:11

技能介绍

go-strict 是一套从两个生产环境 Go 服务中提取的编码规范集合,定位为 Go 编码标准、整洁代码与安全规则。适用于在编写、审查或重构 Go 代码时使用。以下按用途、主要能力、适用场景和限制分段说明。

一、用途 该技能为 Go 项目提供成体系的规则参考,帮助开发者在日常编码、代码审查和重构中保持一致风格,并规避常见错误与安全风险。规则按严重程度划分,包括 CRITICAL、HIGH、MEDIUM 等级别。

二、主要能力

  1. 错误处理(CRITICAL):始终用上下文包装错误;立即检查错误而非延后;在关闭前排空响应体以复用连接;为 API 响应定义类型化错误。示例包括使用 fmt.Errorf 与 %w 逐层添加上下文。
  2. 包组织:internal/ 用于私有代码,pkg/ 用于可复用代码;main.go 保持精简,只做装配与运行,示例展示优雅关闭流程。
  3. 并发安全(HIGH):sync.RWMutex 读写分锁,采用 RLock→检查→RUnlock→Lock→双重检查→创建的惯用模式;后台 goroutine 具备生命周期管理;使用 context 实现优雅关闭。
  4. HTTP 处理模式(Gin,HIGH):构造函数注入处理器依赖、中间件链式组合、在中间件中做输入校验(正则表达式在闭包中只编译一次)。
  5. 命名约定(MEDIUM):接收者用单字母并与类型匹配;构造函数使用 NewType();getter 不加 Get 前缀;布尔方法用 Is/Has/Can;包名小写无下划线;常量导出用 PascalCase、非导出用 camelCase;热路径中使用类型化结构体而非 gin.H{}。
  6. 日志(MEDIUM):使用结构化日志,示例为 zerolog,并建议为 logger 附加组件上下文;同时资料指出 log/slog 是标准结构化日志库,新代码可优先使用,避免仅在特殊原因下再引入第三方库。
  7. 安全规则:源码中不得出现密钥(使用环境变量)、校验所有外部输入、使用 http.StatusXxx 常量。
  8. 上下文与错误传递(HIGH):context.Context 作为第一个参数、在请求路径中从请求派生 context、使用 errors.Is/errors.As 检查被包装的错误。
  9. 版本相关能力:log/slog、math/rand/v2(非加密随机,加密仍用 crypto/rand)、os.Root(限制文件系统访问、防路径穿越)、Go 1.26 特性(Green Tea GC、crypto/hpke、new(expr)、自引用泛型、GOEXPERIMENT=simd、cgo 开销下降)、range over int 与 range over function(自定义迭代器)。
  10. 安全提示:不得公开暴露 /debug/pprof,应绑定到 127.0.0.1 或置于认证之后,expvar 同理。

三、使用方式 资料以规则条文与代码示例呈现,可直接作为编码与审查时的对照清单。文末附带漏洞检查清单,包括错误是否用 %w 包装、响应体是否排空、是否无硬编码密钥、中间件是否校验输入、是否使用双重检查锁、后台 goroutine 是否有退出机制、是否有 30 秒优雅关闭、是否使用结构化日志、热路径是否避免 gin.H{}、中间件错误响应后是否调用 c.Abort()。具体安装命令与接入方式,资料中暂未提供。

四、适用场景 适合使用 Go 编写后端服务、HTTP API(尤其 Gin 框架)的团队与个人,用于统一编码规范、开展代码审查、重构与安全加固。

五、限制 资料中的部分规则与特性带有版本要求(如 Go 1.21+、1.22+、1.23+、1.24+、1.26),低版本环境可能不适用;规则来源于两个生产服务,属于经验性规范而非强制标准。资料未说明收费、价格、平台支持与效果数据,这些信息暂未提供。