这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。
Go的依赖管理
依赖管理演进:GoPath ——> GoVendor ——> Go Module
GOPATH
- GOPATH是Go支持的一个环境变量,value是Go项目的工作区。
- 目录中有几个结构:
- src:存放Go项目的源码。
- pkg:存放编译的中间产物,加快编译速度。
- bin:存放Go项目编译生成的二进制文件。
GOPATH的弊端
场景:当Project A和Project B依赖于某一package的不同版本,那么AB两个项目无法保证编译都能通过。在GOPATH管理模式下,如果多个项目依赖同一个库,则应该是同一份代码。所以不同项目不能依赖同一个库的不同版本。 GOPATH无法实现package的多版本控制。
Go Vendeor
在项目目录下增加vendor文件,所有依赖包副本形式放在$ProkectRoot/vendor 再Vendor机制下,如果当前项目存在Vendor目录,就会优先使用该目录下的依赖,如果依赖不存在就会从GOPATH中查找。
Go Vendor的弊端
场景:当Project A依赖着Package B与Package C,而Package B与Package C又依赖了Package D的不同版本。一旦更新项目,就有可能出现依赖冲突,最终导致编译出错。 Go Vendor无法控制依赖的版本。
Go Module
- 配置文件,描述依赖 go.mod
- 中心仓库管理依赖库 Proxy Go Proxy是一个服务站点,它会缓存源站中的软件内容,缓存的软件版本不会改变。
- 本地工具 go get.mod
- 类似于Java中的Maven(将所需要的依赖添加进pom.xml文件中)
测试
- 回归测试:手动通过终端回归一些固定的主流程场景。
- 集成测试:对系统功能维度做测试验证。
- 单元测试:主要在开发阶段,开发者对函数、模块等做功能验证。
单元测试
- 在Go语言中,所有的测试文件都以_test.go结尾
- 测试函数:func TestXXXX(*testing.T)
- 将初始化逻辑放在TestMain中,例如初始化数据库(连接)等
单元测试的覆盖率
- 一般要求的覆盖率:50%~60%
- 对于资金型服务:80%左右
- 测试分支相互独立、全面覆盖
- 测试单元函数体要足够小,做到单一职责,这样就方便提升覆盖率,也符合函数设计的单一职责。
Mock测试
Monkey是一个开源的mock测试库,可以对method和实例的方法进行mock。(为一个方法/函数打桩)
基准测试
- 对当前的代码进行性能分析,对代码进行优化
- 内置的测试康佳提供了基准测试的能力