不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Go vendor应用

为什么要用它

控制包的依赖,例如一个项目引用的是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
2
3
4
5
6
7
8
9
10
11
12
13
.
├── 20hours
│ ├── 20hours
│ ├── demo.txt
│ ├── file.png
│ └── main.go
├── testgo
├── test.go
└── vendor
└── github.com
└── name
└── A

获取包的指定版本号仓库文件,可以用命令

1
2
3
4
git clone v版本号 httpurl  

举例:获取版本号为1.4.1的go-socket.io包
git clone v1.4.1 https://github.com/googollee/go-socket.io

推荐的方法,使用dep构建

网上教程很多,在此不做赘述

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!