2020.01.14
1304
最初的时候Go语言所依赖的所有的第三方包都放在 GOPATH 目录下面,这就导致了同一个包只能保存一个版本的代码,如果不同的项目依赖同一个第三方的包的不同版本,应该怎么解决呢?
Go语言从 1.5 版本开始开始引入 vendor 模式,如果项目目录下有 vendor 目录,那么Go语言编译器会优先使用 vendor 内的包进行编译、测试等。
安装godep工具
我们可以通过go get 命令来获取 godep 工具。
go get github.com/tools/godep
命令执行成功后会将 godep 工具的源码下载到 GOPATH 的 src 目录下对应的文件夹中,同时还会在 GOPATH 的 bin 目录下生成一个名为 godep.exe 的可执行文件
为了方便使用 godep 工具,我们需要将存放 godep.exe 文件的目录添加到环境变量 PATH 中。在系统变量中找到并选中“Path”一行,点击“编辑”按钮,在新弹出的窗口中点击“新建”,然后在最下面一行中填入对应的目录信息。确认无误后点击“确定”。
godep工具的基本命令
完成上面的操作后,我们就可以在命令行窗口(CMD)中使用 godep 工具了,godep 支持的命令如下表所示:
命令
作用
godep save
将依赖包的信息保存到 Godeps.json 文件中
godep go
使用保存的依赖项运行 go 工具
godep get
下载并安装指定的包
godep path
打印依赖的 GOPATH 路径
godep restore
在 GOPATH 中拉取依赖的版本
godep update
更新选定的包或 go 版本
godep diff
显示当前和以前保存的依赖项集之间的差异
godep version
查看版本信息
使用godep help [命令名称]可以查看命令的帮助信息。
使用godep工具
执行godep save 命令,会在当前目录中创建 Godeps 和 vender 两个文件夹。Godeps 文件夹下会生成一个 Godeps.json 文件,用来记录项目中所依赖的包信息;vender 目录则是用来保存当前项目所依赖的所有第三方包。
生成的 Godeps.json 文件的结构如下所示:
{
"ImportPath": "main",
"GoVersion": "go1.13",
"GodepVersion": "v80",
"Deps": [
{
"ImportPath": "github.com/go-gomail/gomail",
"Comment": "2.0.0-23-g81ebce5",
"Rev": "81ebce5c23dfd25c6c67194b37d3dd3f338c98b1"
}
]
}
其中,“ImportPath”为项目的路径信息,“GoVersion”为Go语言的版本号,“GodepVersion”为 godep 工具的版本号,“Deps”为当前依赖包的路径、版本号信息等等。
提示:当引用的第三方包要升级时,只需要修改 Godep.json 里面的依赖包的版本号,然后再次执行 godep save 命令即可。
godep 工具的主要功能就是控制Go语言程序编译时依赖包搜索路径的优先级。例如查找项目的某个依赖包,首先会在项目根目录下的 vender 文件夹中查找,如果没有找到就会去 GOAPTH/src 目录下查找。