Go语言依赖管理
Go语言依赖管理
0、说明:
导入第三方的库,一般有下面几种方式进行管理第三方库,现在一般推荐使用go mod
的方式进行管理。其他两个了解一下就行了。
1、管理方式GOPATH
GOPATH是一个环境,Linux默认在~/go目录下,Windows默认在%USERPOFILE%\go目录下,当然也可以自己指定目录。
自己的包路径以及第三方的包路径都放在GOPATH目录下,import的模块全到GOPATH下找,很明显这样会导致GOPATH越来越大。
并且,需要在GOPATH的目录下创建一个叫src的目录,且只能叫src。一般安装时会默认创建。
并且,需要设置GO111MODULE=off,一般安装时,默认就是off
例如:
假设GOPATH目录是/tmp/gopathtest,则需要创建src目录,然后创建项目时,选择该路径,而不能乱选路径,否则会导不到对应的包。就像这样
创建完项目后,我们下载第三方库zap文件
go get go.uber.org/zap
我们可以看到,这个包会放在GOPATH下
找依赖时,会先去GOROOT找,然后再去GOPATH找,GOROOT就是Go安装的目录,GOPATH就是上面说的
太麻烦了,因此现在一般不用了。
2、管理方式GOVENDOR
GOPATH有一个缺点,就是不能使用不同版本的包,假设你用的zap是1.12,而我用的1.1,但GOPATH下只能存一份zap。这样解决的方法就是在自己的项目中添加一个虚拟环境,然后下载自己需要版本的zap,虚拟环境的目录名必须叫vendor,因为go会去找个目录下找。这种方式就叫GOVENDOR。
go查找的目录就变成了先找当前项目下的vendor,然后是GOROOT,最后是GOPATH.
对应也诞生了一些第三方依赖管理工具,例如
也挺麻烦,现在一般也不用了
3、管理方式go mod
以go mod方式创建项目,会自动生成go.mod文件和go.sum文件
下载的第三方包,会自动下载到GOPATH下的pkg文件夹下mod文件夹下
依赖的包都会写在go.mod中
使用go mod init xxx初始化一个go.mod文件
使用go get xxx来下载第三方包,更新到go.mod文件中
使用go mod tidy来清理go.mod
go get指定版本go get xxx@yyy,不指定就会下载最新的