社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近在项目开发过程中,遇到一个问题,当代码编写完成后,执行go run 时,提示如下错误:
大概意思就是我有golang.org/x/net/trace的两个副本,且提示了,可以通过vendor的副本解决。见鬼了,我哪来的golang.org/x/net/trace两个副本?仔细观察,才发现,我之前已经安装了golang.org/x/net/trace,然后项目开发使用了etcd,该源码目录下有个vendor子目录,里面包含了目录如下:
在网上查阅才知道,假设有如下场景:
你的工程引用了一些外部包,且这些包仍有更新的可能,或者你们项目组另外开发一些公用包,且还在并行开发迭代中,如果你的项目代码本来运行稳定,却因为外部包的更新导致运行出现问题,你是不是很郁闷?所以为了开发时或者部署时,将外部包版本确定,在go1.6之后引入vendor目录,即你的项目工程中,多了个vendor目录,执行go build的时候,会在vendor目录下边寻找你引用的外部包,这样每次编译的时候,当外部包修改,测试通过后,将新的外部包内容替换到vendor中,不断的迭代更新,保证了外部包的稳定,也不会影响到你当前的代码了。
我使用的工具是govendor,通过如下命令安装:
go get -u -v github.com/kardianos/govendor
使用方法:
1.在项目目录下执行govendor init
2.govendor add +external或govendor add +e
这样,项目目录则多了个vendor目录,里面包含了项目引用的外部包了。
当然,这里的前提是,你的GOPATH本来就已经安装了这些外部包,govendor的工作只是将你项目中引用的外部包,从GOPATH拷贝到了你项目的vendor目录下。
govendor常用的命令如下:
init 创建 vendor 文件夹和 vendor.json 文件
list 列出已经存在的依赖包
add 从 $GOPATH 中添加依赖包,会加到 vendor.json
update 从 $GOPATH 升级依赖包
remove 从 vendor 文件夹删除依赖
status 列出本地丢失的、过期的和修改的package
fetch 从远端库增加新的,或者更新 vendor 文件中的依赖包
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!