首页 > 使用govendor灵活管理Go程序中的依赖包

使用govendor灵活管理Go程序中的依赖包

业务痛点

使用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的相关信息,这说明新增依赖包管理已经成功了。

实例操作二

原来使用的第三方接口是v2版本,现在更新为v3版本,相应的接口库都有全新改变,如何操作呢?

在当前项目顶层目录下面,执行下面的命令

govendor update github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606

将从$GOPATH/src/github.com下面复制指定的新接口库,复制到当前项目的vendor目录中,并看到vendor.json的内容已经修改了。原来的旧版本接口库还保留在vendor目录中,你可以指定删除掉它,我这里暂且先保留。还有下面的库

govendor update -tree 'github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common'

-tree选项表示将下面的文件和子目录一并都复制进来,这个选项务必要选。

 

更多相关: