go vendor指北
vendor的种类
golang的vendor分为两种
- 不启用
mod的govendor。这里的govendor是一个需要独立安装的工具。这个的操作逻辑比较复杂,因为关联了gopath的逻辑。好在现在绝大多数项目都启用了mod进行包管理,我们并不需要知道。 - 启用
mod后,vendor是一个mod的内建指令,使用方式为go mod vendor。以下将具体阐述相关细节。
vendor的工作方式
当程序进行编译时,会根据mod文件里的库路径及版本拉去gopath对应的源码进行编译(不考虑cgo的情况下),如果本地路径下存在vendor,会从vendor中拉去对应的源码进行编译。这个可以避免各种私有库、或者网络原因导致协作者无法根据mod拉去对应的库。此时我们相当于把库附在源码里上传git、svn。坏处就是协作方在pull的时候会非常崩溃。。。
使用
当我们使用go mod vendor的时候会将gopath中所有的mod提到的库补充至vendor文件夹。因此最佳的使用方式是。
go mod tidy
go mod vendor
如果我们更新了某个依赖库,则应该执行。
go get -u xxx
go mod vendor
注意事项
- 保证每个项目仅有一个且位于根目录的
vendor文件夹 - 保证每个启用
mod功能 - 保证拉取时
gopath中的代码是正确的(没有直接通过编辑器更改) - 禁止修改vendor中的代码
License:
CC BY 4.0