Go 开发模式
必需工作流程
进行审查时,请调用相关技能: security-audit (OWASP)、enterprise-readiness (OpenSSF/SLSA)、github-project (分支保护)。所有技能均为必需。
核心原则
类型安全
- 避免:
interface{}(改用any)、sync.Map、散乱的类型断言、反射 - 偏好: 泛型
[T any]、errors.AsType[T](Go 1.26)、具体类型 - 升级后运行
go fix ./...
一致性
- 每个问题域使用一种模式
- 匹配现有代码库的模式
- 要么整体重构,要么完全不重构
- 配置优先级:默认值 < 配置文件 < 环境变量 < 标志
测试
- 构建标签隔离测试层级:单元(默认)、
integration、e2e - 始终使用
t.Parallel()、t.Helper()、表驱动子测试 - 直接使用
log/slog—— 绝不要包装成自定义 Logger 接口
约定
- 错误消息:小写、无标点(
errors.New("invalid input")) - 命名:ID、URL、HTTP(而非 Id、Url、Http)
- 错误包装:
fmt.Errorf("failed to process: %w", err)
参考资料
Git hooks: ls lefthook.yml 2>/dev/null && lefthook install || echo "添加 lefthook — 参见 references/lefthook-template.md"
按需加载:
| 参考文档 | 用途 |
|---|---|
references/architecture.md | 包结构、配置管理、中间件链 |
references/logging.md | 使用 log/slog 的结构化日志,从 logrus 迁移 |
references/cron-scheduling.md | go-cron 模式:命名任务、运行时更新、上下文、弹性 |
references/resilience.md | 重试逻辑、优雅关闭、上下文传播 |
references/docker.md | Docker 客户端模式、缓冲池 |
references/ldap.md | LDAP/Active Directory 集成 |
references/testing.md | 测试策略、构建标签、表驱动测试 |
references/linting.md | golangci-lint v2、staticcheck、代码质量 |
references/api-design.md | 位掩码选项、函数选项、构建器 |
references/fuzz-testing.md | Go 模糊测试模式、安全种子 |
references/contracts-and-invariants.md | 契约、不变量、属性测试 |
references/mutation-testing.md | Gremlins 配置、测试质量度量 |
references/makefile.md | 用于 CI/CD 的标准 Makefile 接口 |
references/modernization.md | Go 1.26 现代化工具、go fix、errors.AsType[T]、wg.Go() |
references/lefthook-template.md | Go 项目 Git hooks 的即用型 lefthook.yml |
references/reusable-workflows.md | 可复用的 Actions 工作流调用者、权限传播、发布门输出 |
references/single-build-release.md | 单构建发布:一次交叉编译,复用于发布+容器 |
references/awesome-go-submission.md | awesome-go 提交:CI 解析的 PR 正文、条目格式、名称冲突 |
质量门
在完成任何审查之前运行:
golangci-lint run --timeout 5m # 代码检查
go vet ./... # 静态分析
staticcheck ./... # 额外检查
govulncheck ./... # 漏洞扫描
go test -race ./... # 竞态检测
标准库漏洞修复
当 govulncheck 报告标准库漏洞时:通过 vuln.go.dev 检查修复版本,在 go.mod 中更新 go X.Y.Z,运行 go mod tidy。对于有分支保护的仓库,使用 PR 分支。
贡献: 提交改进到 https://github.com/netresearch/go-development-skill