Go Engineering - Elegant Project
优雅项目
Go 应用
代码结构
按
功能
拆分 - Kubernetes / Docker / Helm / Prometheus
代码规范
- 编码规范 - https://github.com/xxjwxc/uber_go_guide_cn
- 静态代码检查 - https://github.com/golangci/golangci-lint
- 最佳实践
代码质量
- 单元测试
- 可测试
- 将依赖的数据库等抽象成
接口
,在被测代码中调用接口的方法,在测试时传入Mock
类型 - 尽量减少 function 中的依赖 + 依赖是容易 Mock 的
- 将依赖的数据库等抽象成
- 高覆盖率
- 可测试
- Code Review
Mock 工具
- https://github.com/golang/mock
- 官方 Mock 框架,与 Golang 内置的 testing 包集成,最常用
- 实现基于
interface
的 Mock 功能
- https://github.com/DATA-DOG/go-sqlmock
- 模拟数据库连接
- https://github.com/jarcoal/httpmock
- 模拟 HTTP 请求
- https://github.com/bouk/monkey
- 通过
替换函数指针
的方式来修改任意函数的实现
- 通过
高覆盖率
- 使用
gotests
自动生成单元测试代码 - 定期检查单元测试覆盖率
1 | $ go test -race -cover -coverprofile=./coverage.out -timeout=10m -short -v ./... |
编程哲学
- 面向
接口
编程- 接口的作用:为不同层级的模块提供一个定义好的
中间层
- 接口的作用:为不同层级的模块提供一个定义好的
- 面向
对象
编程- Go
不支持
OOP,但可以利用自身特性实现类似效果
- Go
软件设计方法
设计模式
针对
特定场景
的最佳实现方式,同样适用于 Go
SOLID 原则
偏重设计原则 - https://github.com/marmotedu/geekbang-go/blob/master/SOLID原则介绍.md
项目管理
工具
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.