go vendor 是go 1.5 官方引入管理包依赖的方式,1.6正式引入
其基本思路是,将引用的外部包的源代码放在当前工程的vendor目录下面,go 1.6以后编译go代码会优先从vendor目录先寻找依赖包;
将源码拷贝到当前工程的vendor目录下,这样打包当前的工程代码到任意机器的$GOPATH/src下都可以通过编译,避免项目代码外部依赖过多,迁移后,
需要多次go get 外包依赖包;而且通过go get 重新拉去的外部依赖包的版本可能和工程开发时使用的不一致,导致编译错误问题。
vender需要在原文件下面创建vendor目录,然后把vendor的文件包放入vendor目录即可,在引用的时候不需要指定vendor路径。
如果一个包在vendor和GOPATH下面都存在那么谁会优先使用呢。
结论是:
-
- 优先使用vendor目录下面的包。
-
- 如果vendor下面没有搜索到,再搜索GOPATH下面的包。
-
- 要么完整使用vendor下面的包,要么完整使用GOPATH下面的包,不会混合使用:
-3.1 假如一个函数定义再GOPATH下面的包里,而没有定义在vendor路径下的同名包里,那么调用者就会报函数未定义错误,因为调用者如果找到有vendor路径下面的包,就不会去找GOPATH下面的包了。
- 要么完整使用vendor下面的包,要么完整使用GOPATH下面的包,不会混合使用: