Go Engineering Guidelines
8/3/26About 1 min
Go Engineering Guidelines
Go 工程强调可读的控制流、显式依赖和统一工具链。规范的目标是降低认知成本,而不是追求所有项目相同的目录模板。
Package Design
- package 围绕稳定职责组织,名称短且表达能力。
- 依赖指向核心领域,基础设施实现放在边界。
- interface 由使用方定义,以最小行为满足测试和替换。
- 避免
util、common逐渐成为无边界依赖中心。
Error and Context
- 错误增加操作上下文,但保留底层 cause 供判断。
- 只在能够处理、转换或增加语义时捕获错误。
context.Context作为首个参数传递 deadline、cancel 和请求范围值。- 不把 context 保存进长期对象,也不把业务可选参数塞入 context。
Concurrency
- 每个 goroutine 都有 owner、结束条件和取消路径。
- channel 用于传递 ownership 或事件;共享状态可直接使用 mutex。
- 并发必须有上限和背压,不能为每个输入无限创建 goroutine。
- close 由发送方或 owner 负责,避免多方竞争关闭。
Quality Loop
format → vet/static analysis → unit test → race test → benchmark/profile基准测试报告 workload、输入规模和环境;优化后同时验证正确性、分配次数和尾延迟。
