golang包管理工具之govendor的使用

1、govendor简介

        golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。常用的依赖包管理工具有godepgovendor等,在Golang1.5之后,Go提供了 GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认开启该环境变量),用于将go build时的应用路径搜索调整成为 当前项目目录/vendor 目录方式。通过这种形式,我们可以实现类似于 godep 方式的项目依赖管理。

2、使用步骤

2.1. 安装

go get -u -v github.com/kardianos/govendor

2.2. 使用

#进入到项目目录
cd /home/gopath/src/myproject

#初始化vendor目录
govendor init

#查看vendor目录
[root@CC32225A myproject]# ls
commands  main.go  vendor  myproject_test.sh

#将GOPATH中本工程使用到的依赖包自动移动到vendor目录中
#说明:如果本地GOPATH没有依赖包,先go get相应的依赖包
govendor add +external
或使用缩写: govendor add +e 

#Go 1.6以上版本默认开启 GO15VENDOREXPERIMENT 环境变量,可忽略该步骤。
#通过设置环境变量 GO15VENDOREXPERIMENT=1 使用vendor文件夹构建文件。
#可以选择 export GO15VENDOREXPERIMENT=1 或 GO15VENDOREXPERIMENT=1 go build 执行编译
export GO15VENDOREXPERIMENT=1

此时看到的vendor.json文件就比之前多了许多,例如:

{
	"comment": "",
	"ignore": "test",
	"package": [
		{
			"checksumSHA1": "aQFLbMaXYrtdgLlR2m+DaZwz4WM=",
			"path": "github.com/Lofanmi/pinyin-golang/pinyin",
			"revision": "30cdbfc8c2de3b2efb359b8d95631229eec88ffb",
			"revisionTime": "2018-08-08T03:00:53Z"
		},
		{
			"checksumSHA1": "PLYRsSaqhSKrGIuxWkV+B9uMUL8=",
			"path": "github.com/alecthomas/log4go",
			"revision": ""
		},
		{
			"checksumSHA1": "a9Sq/X9bS1l5EA7KfRmtw4lMedY=",
			"path": "github.com/astaxie/beego",
			"revision": ""
		},
		{
			"checksumSHA1": "zgHK1vxUJDZTXAPCw+Bls7St0Ks=",
			"path": "github.com/astaxie/beego/config",
			"revision": ""
		},
		
                   ....
		{
			"checksumSHA1": "REkmyB368pIiip76LiqMLspgCRk=",
			"path": "golang.org/x/sys/cpu",
			"revision": "ec910dc1c36d683f77d2db63b82474261f0ac140",
			"revisionTime": "2018-09-10T02:23:21Z"
		},
		{
			"checksumSHA1": "gq+MtaxaV8I0Nl19Vdvy4yhRJOE=",
			"path": "golang.org/x/sys/unix",
			"revision": "ec910dc1c36d683f77d2db63b82474261f0ac140",
			"revisionTime": "2018-09-10T02:23:21Z"
		},
		{
			"checksumSHA1": "Y7nctMxT58lRM78VtElPerhcnEs=",
			"path": "golang.org/x/sys/windows",
			"revision": "ec910dc1c36d683f77d2db63b82474261f0ac140",
			"revisionTime": "2018-09-10T02:23:21Z"
		},
		{
			"checksumSHA1": "i3wCya26lOLhEfq0EyzriGrQ35s=",
			"path": "golang.org/x/time/rate",
			"revision": "ec910dc1c36d683f77d2db63b82474261f0ac140",
			"revisionTime": "2018-09-10T02:23:21Z"
		},
		{
			"checksumSHA1": "oQQwx8g3cICuxaXaogTf1nr027E=",
			"path": "gopkg.in/asn1-ber.v1",
			"revision": "379148ca0225df7a432012b8df0355c2a2063ac0",
			"revisionTime": "2017-05-11T16:59:59Z"
		},
		{
			"checksumSHA1": "BYJlm+iDc2MDCVUy6eITxw3IeOU=",
			"path": "gopkg.in/gomail.v2",
			"revision": "81ebce5c23dfd25c6c67194b37d3dd3f338c98b1",
			"revisionTime": "2016-04-11T21:29:32Z"
		},
		{
			"checksumSHA1": "ZxVlaB3g5rPylGFPXk0id4j4R10=",
			"path": "gree/common/security",
			"revision": ""
		}
	],
	"rootPath": "myproject"
}

2.3.其他常用命令


  govendor list可以快速查看你项目中的外部依赖包。例如:

 v  github.com/astaxie/beego
 v  github.com/astaxie/beego/cache
 v  github.com/astaxie/beego/cache/redis
 v  github.com/astaxie/beego/config
 v  github.com/astaxie/beego/context
 v  github.com/astaxie/beego/context/param
 v  github.com/astaxie/beego/grace
 l  benben-project/router
 l  benben-project/config
 l  benben-project/controllers
 l  benben-project/log
 l  benben-project/models

其中最左边的是描述包的状态,右边是你工程的依赖包 
 govendor add添加依赖包到vendor目录下,在使用 govendor add命令时,后面需要跟上下面介绍的一些状态,也可以直接跟上缺失包的地址,如下文常见错误中的做法。 
 govendor update从你的GOPAHT中更新你工程的依赖包 
 govendor remove从你工程下的vendor文件中移除对应的包 
 govendor fetch添加或者更新vendor文件夹中的包

 govendor使用状态来指定包
golang包管理工具之govendor的使用_第1张图片

其中有一些状态存在简写,例如:+std可以用+s表示,+external可以用+ext或者+e表示,+external可以用+exc或者+x表示。

在使用时,你也可以对这些状态进行逻辑组合,例如:

+local,grogram表示既满足+local又满足+program。
+local +vendor表示只要满足两者之一。
+vendor,program +std表示vendor和program是与的关系,整体和std是或的关系
+vendor,^program表示满足vendor,但却不满足program。
3.常见错误 
1. 服务器提示某个依赖包没有找到 
原因可能是vendor文件中没有该包或者vendor.json文件中没有该包的描述信息。假设"github.com/astaxie/beego/logs"包的信息在vendor.json文件中没有找到,则在go命令行中执行govendor add github.com/astaxie/beego/logs。
 

你可能感兴趣的:(Golang)