这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记。
go 包管理
现在日常go开发用到的就是go mod方式来进行go的依赖管理。go mod init 初始化,go download 下载依赖,go mod tidy自动删除不需要的依赖,增加需要的依赖,是最常用的命令。
gopxoxy可以缓存来自其它网站的依赖,避免因为变更产生问题。
依赖管理三要素:
配置文件表述依赖:go.mod
中心仓库管理依赖库:Proxy
本地工具:go get/mod
单元测试
规则
所有测试文件以_test.go结尾,应该与待测文件放在同一目录下,go test可以直接运行该package下的测试文件
函数命名:func TestXxx
初始化逻辑放在TestMain中,func TestMain(m *testing.M){测试前初始化 code := m.Run() 测试后释放资源}
覆盖率
单元测试对代码测试的行数占总行数的比例,可以通过go test xxx --cover得到覆盖率
应该让覆盖率尽可能高来让单元测试更加完备。
Mock
打桩测试,不再依赖本地文件,可以在任何时间,任何环境下进行单元测试。
调用Patch和Unpatch 函数来打桩和恢复。
项目实战
- 首先分析项目需求来建立ER图,明确各个实体之间的关系,建立模型,也就是对应的go项目的Model层的各个结构体。
- 项目主要分为三个模块:Model Service Controller
- 查询时用到sync.Once, 作用在高并发场景下只执行一次的场景,也即单例模式,可以减少存储的浪费。
- Model层处理底层与数据库相关的操作,Service层则获取api所需要的结构体,比如可以定义PageInfo来返回。
- 如果一次api调用返回的两个成员并无依赖关系可以考虑并行执行。