为什么要用它
控制包的依赖,例如一个项目引用的是A包1.0版本后编译成功,结果几个月后A包tag号升到了2.3,而我们平时用go get
命令是直接从master
分支下引入的,因此可能会造成引入了同样的包,但编译不通过的问题。
而如果这个项目中存在vendor
文件夹,go
项目编译时就会优先编译vendor
文件夹里的包。
问题还原
今天编译一个用Go
写的语音识别服务的项目,缺失的A包用go get
命令获取了,但编译后显示xxx function not defined
,而我查了这个xxx
函数是A包声明好的,这是什么原因呢。
原因就在于版本不匹配。
解决
简单直接的方法
在该项目下新建一个vendor
文件夹,假如这个包是引入github
上的,就在这下面建立基于github
的路径,像这样
1 | . |
获取包的指定版本号仓库文件,可以用命令
1 | git clone v版本号 httpurl |
推荐的方法,使用dep构建
网上教程很多,在此不做赘述