这是我参与「第五届青训营」笔记创作活动的第4天,在昨天的学习之中主要学习了Go语言的并发编程的相关知识,知道了如何使用Go语言来进行多线程编程,以及一些关键术语。在今天的学习笔记之中,主要展示的是
一、本堂课的重点内容
今天课程的主要框架为:
-
语言进阶
- Go语言的并发编程
-
依赖管理
- 背景
- Go依赖管理演进
- Go Module实战
-
测试
- 单元测试
- Mock测试
- 基准测试
-
项目实战
- 需求设计
- 代码开发
- 测试运行
二、详细知识介绍
2.1 依赖管理的背景
所谓的依赖是指各种开发包,当我们需要使用某些功能的时候我们其实可以不需要按部就班的自己去重新写所需要的功能,我们只需要“站在巨人的肩膀上”,去引用他人已经写好了的开发包,并使用开发包里的相关函数来进行二次开发,这样有助于我们更专注于自己的业务代码。
在Go语言之中,有独特的方法来进行依赖管理,这就需要进行学习,而依赖管理主要是从不同环境(项目)依赖的版本不同以及控制依赖库的版本两个角度进行依赖管理。
2.2 Go语言依赖管理演进
Go语言的依赖管理主要经历了三个途径,如图所示:
2.2.1 GOPATH阶段
GOPATH其实是环境变量,这个阶段的依赖方式主要是直接依赖src下的代码,使用go get下载最新版本的包到src目录下。但是采用这种方式会存在一个问题,那就是无法实现package的多版本控制,如图所示,Project A 依赖 Pkg V1 的方法,而又有一个新的项目Project B依赖的却是Pkg V2的版本,那么对于V2版本之中所可能使用的func A()则可能在Pkg V2之中不再存在而成为了func B()那么再次构建项目的时候便会出现问题。
2.2.2 Go Vender阶段
为了解决上述Pkg版本问题呢,就过渡到了Go Vender阶段,这个阶段实际上是在项目文件之中创建一个名叫Vender文件夹,每次进行包搜索的时候会优先前往这个文件夹进行包搜索,如果这个文件夹搜索不到对应的包,那么就会紧接着从GOPATH路径下的src文件夹去找,这样就解决了每一个项目都要依赖同一个文件夹而造成版本冲突的问题。
但是采用这种方式依旧会存在问题,如图所示,如果有个项目Project A依赖了两个包,一个是B包,一个是C包,但是他们都同时依赖了不同版本的D包,这个时候D包就会不兼容,造成一定的问题。
2.2.3 Go Moudle阶段
上面的Go Vender方法依旧会出现版本兼容的问题,出现这个问题的主要原因主要是由于使用这个方式无法标明包的版本,为了解决这个问题,从而引出了Go Modoule方法。
采用Go Modoule方法实际上是在项目之中增加了一个go.mod文件,通过这个文件来集中进行包的管理。
三、个人总结
在复杂项目之中,可能需要用到各种第三方的包,这个时候就需要对这些包进行管理,为此就出现了依赖管理,在这节课的学习比较粗略的学习这一方面的知识。