GO语言入门-工程实践(二)|青训营笔记

100 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。

Go的依赖管理

依赖管理演进:GoPath ——> GoVendor ——> Go Module

GOPATH

  • GOPATH是Go支持的一个环境变量,value是Go项目的工作区。
  • 目录中有几个结构:
    1. src:存放Go项目的源码。
    2. pkg:存放编译的中间产物,加快编译速度。
    3. 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文件中)

测试

  • 回归测试:手动通过终端回归一些固定的主流程场景。
  • 集成测试:对系统功能维度做测试验证。
  • 单元测试:主要在开发阶段,开发者对函数、模块等做功能验证。

单元测试

  1. 在Go语言中,所有的测试文件都以_test.go结尾
  2. 测试函数:func TestXXXX(*testing.T)
  3. 将初始化逻辑放在TestMain中,例如初始化数据库(连接)等

单元测试的覆盖率

  1. 一般要求的覆盖率:50%~60%
  2. 对于资金型服务:80%左右
  3. 测试分支相互独立、全面覆盖
  4. 测试单元函数体要足够小,做到单一职责,这样就方便提升覆盖率,也符合函数设计的单一职责。

Mock测试

Monkey是一个开源的mock测试库,可以对method和实例的方法进行mock。(为一个方法/函数打桩)

基准测试

  1. 对当前的代码进行性能分析,对代码进行优化
  2. 内置的测试康佳提供了基准测试的能力