业务痛点
使用Go开发程序的过程中,为了方便开发,往往会引用很多标准库或者第三方的依赖包,第三方依赖包往往比标准库功能更全面更强大更接地气,那么如何管理众多的第三方依赖包呢?如何更新其版本?在不需要时,如何删除掉呢?如果有工具能帮助解决这个问题就好了,好在Go中前辈们其实早就想到了这个痛点,有个第三方的库govendor就能完美解决这些问题,让我们更舒心地使用依赖库,只需要很少的几行命令就能搞定这些。
安装
只需要下面的一行命令,就能将govendor安装到$GOPATH的bin目录下面
go get -u -v github.com/kardianos/govendor
如果命令行找不到该命令,需要将$GOPATH/bin加入PATH变量中去。在Linux上,可以编辑~/.bashrc文件,在Mac上煤科院编辑~/.bash_profile文件,以我目前Mac开发机为例,我的$GOPATH为/Users/tao/go,我只需在前面的文件中加入
vim ~/.bash_profile
添加下面的一行
export PATH=/Users/tao/go/bin:$PATH
使用下面的命令使之生效
source ~/.bash_profile
查看是否生效
echo $PATH
然后在命令行执行govendor -h就能看到govendor命令可以灵活使用了。
govendor的最大的好处
Go从1.5版本之后,就默认优先使用vendor子目录中的依赖库,而不是$GOPATH/src中的依赖包,这样我们可以把工程源码到处复制,使用时直接go build就可以了,不需要考虑一大堆第三方依赖包的管理问题。
使用govendor管理第三方依赖包
现在进入你的Go工程目录下面,依次执行下面的命令,假设我现在的项目工程名为clairvoyance:
初始化vendor目录
govendor init
此时会在当前工程目录(顶层)下面生成一个子目录vendor,里面有个文件vendor.json记录了一些模板信息。
govendor add +external
它会将你之前单独安装到$GOPATH/src目录下的所有依赖包都复制到本项目的vendor下面,并且在vendor.json列出详细的清单。如果$GOPATH/src目录下面没有依赖包,会解析当前项目中的go文件来将所有的依赖库先go get下来,存放到vendor下面。
查看你的工程中的第三方包列表
govendor list
简要列出各依赖包列表,实操发现,这个命令比下面的govendor list -v fmt命令显示的包更全面一些。
格式化查看
govendor list -v fmt
可以更详细地查看各种包的依赖关系,但是有些包未显示出来。
添加或更新包到本地vendor目录
govendor fetch
实操验证
后来再新增一个第三方依赖包
govendor fetch github.com/ClickHouse/clickhouse-go
发现vendor子目录下面的vendor.json中的确新增了clickhouse的相关信息,这说明新增依赖包管理已经成功了。