govendor管理工具

为什么使用govendor管理工具?
当我们在本地要开发多个项目时,如果不同的项目需要依赖某个第三方包的不同版本,这时候仅仅通过全局的 GOPATH 来存放第三方包是无解的。解决方法有一个,那就是需要在不同的项目里设置不同的 GOPATH 变量来解决冲突问题。但是这还是不能解决一个重要的问题,那就是当我们的项目依赖了两个第三方包,这两个第三方包又同时依赖了另一个包的两个不同版本,这时候就会再次发生冲突。这种多版本依赖有一个专业的名称叫「钻石型」依赖。

为了解决这个问题,Go 1.6 引入了 vendor 机制。这个机制非常简单,就是在你自己项目的目录下增加一个名字为 vendor 子目录,将自己项目依赖的所有第三方包放到 vendor 目录里。这样当你导入第三方包的时候,优先去 vendor 目录里找你需要的第三方包,如果没有,再去 GOPATH 全局路径下找。

然后每个第三方项目都会有自己的 vendor 子目录,如此递归下去,可以想象,一个大型项目将会有一颗很深的依赖树。不过实际上这颗依赖数没你想象的那么深,因为 Go 的第三方开源包普遍比较轻量级,依赖不是很多。毕竟 Go 语言已经将很多互联网常用的工具包都内置了。

1.安装govendor

   go get -u github.com/kardianos/govendor

2.配置环境变量

  将$GOPATH/bin/添加至path中

3.测试

  在自己的$GOPATH/src下创建一个名为go_test的测试项目,然后进入此目录下执行:govendor init命令进行初始化操作,此时此目录下会生成一个vendor文件夹,和一个json文件。    

4.加载测试包

  输入命令govendor fetch github.com/pkg/errors,此时系统会将errors包下载到vendor目录下,并更新vendor.json配置文件

命令大全

init
初始化 vendor 目录
list
列出所有的依赖包
add
添加包到 vendor 目录,如 govendor add +external 添加所有外部包
add
PKG_PATH 添加指定的依赖包到 vendor 目录
update
从 $GOPATH 更新依赖包到 vendor 目录
remove
从 vendor 管理中删除依赖
status
列出所有缺失、过期和修改过的包
fetch
添加或更新包到本地 vendor 目录
sync
本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本
get
类似 go get 目录,拉取依赖包到 vendor 目录


常见错误:

 [WARN]  Unable to checkout golang.org/x/sys/unix
 [ERROR] Error looking for golang.org/x/sys/unix: Cannot detect VCS

如果出现此类错误是因为被墙的原因,需要在/etc/profile中设置一下代理然后source一下

 #Proxy
export http_proxy=socks5://127.0.0.1:xxxx
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
Last modification:June 23rd, 2019 at 09:50 am
如果觉得我的文章对你有用,请随意赞赏