这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
第二节:Go 语言上手 - 工程实践
Go依赖管理(上)
这是GoLang开发中非常重要的一环
依赖管理,管理的是代码中所用到(依赖)的各式各样的库/包
Go的依赖管理走到如今经历了大致3个阶段,我们依个说明——
-
GOPATH(原始依赖管理方式)
Go语言有个重要的环境变量
GOPATH,这一时代环境变量目录下有以下文件:bin、pkg、src,分别对应编译产生的二进制文件、用于加速编译的中间产物以及项目源码。使用包时,我们直接使用go get命令把包下载到src里,项目依赖的就是src中的代码这样做的弊端——无法对package进行多版本控制,不同项目只能依赖同一个版本的库,这显然不太现实,如果 package 没有做到完全的向前兼容,往往会导致一些问题,而且新版本包有问题不能很快回退,缺少管理手段。
-
Go Vendor
这一时代在项目目录中新增了vendor目录,其中存放了当前项目依赖的副本,每个项目引入一个依赖副本。
在这个时代,依赖管理的规则如下:
- 优先检测当前目录是否有
vendor目录,有的话从此目录查找依赖 - 如果同目录没有,则往上层目录查找,
-
- 要么找到依赖
- 要么找到一直到
$GOPATH/src还没有找到
- 如果第二步没有找到,那么,从
GOROOT目录找 - 如果还没找到,那么,从
$GOPATH/src继续查找 - 失败 or 找到依赖
这个时代存在的问题是无法解决依赖包版本变动问题和一个项目依赖同一个包的不同版本的问题
eg: A依赖pkg B和C ,B、C分别依赖D的D1和D2两个不同的版本,容易出现问题
- 优先检测当前目录是否有