| name | Go开发模式 |
| description | Go 语言项目的开发模式和最佳实践。当用户提到"写 Go 代码""Go 服务""Go 接口""goroutine""Go 测试"时使用。 |
Go 开发模式
适用场景
使用 Go 语言开发后端服务、CLI 工具、微服务时。
核心原则
- 显式优于隐式——Go 不鼓励魔法,代码应该直白可读
- 错误是值——每个可能出错的地方都显式处理错误,不要忽略
- 接口小而精——接口只定义必需的方法,一个方法的接口最好
- 组合优于继承——用结构体嵌入和接口组合,不要模拟类继承
- 并发用 goroutine + channel——但不要过度并发,简单任务用同步就好
项目结构
Go 项目推荐按功能/领域组织,而非按层级:
- cmd/ 放入口文件
- internal/ 放不对外暴露的逻辑
- pkg/ 放可复用的公共包
- 每个包职责单一,包名就是它做什么
错误处理
- 返回 error 而非 panic
- 用 fmt.Errorf 包装错误添加上下文
- 在调用方处理错误,不在被调用方静默吞掉
- 对外 API 返回统一的错误结构
并发模式
- 用 context 控制 goroutine 生命周期
- 用 sync.WaitGroup 等待多个 goroutine 完成
- channel 用于通信,mutex 用于保护共享状态
- 总是处理 channel 的关闭和超时
测试
- 表驱动测试(Table-Driven Tests)是标准模式
- 用 testify 做断言
- 测试文件和被测文件同目录,以 _test.go 结尾