vendor 简介
vendor是golang的一个包管理器.开启包管理器,需要一个环境变量的支持,且golang sdk 版本必须大于1.5
export GO15VENDOREXPERIMENT=1
- 这个变量值为1,表示编译时,开启包管理器.
- 执行go build的时候,会在vendor目录下边寻找你引用的外部包.
- 可以将需要的外部包放到vendor目录中.这样每次编译的时候,当外部包修改,测试通过后,将新的外部包内容替换到vendor中,不断的迭代更新,以免测试包影响到依赖他的程序的正常运行.
示例结构
假设GOPATH=/opt/go 下边有如下几个目录
opt |----go |--------bin |--------src |------------github.com |----------------platform |--------------------logs |--------------------dbobj |--------------------utils |--------------------main.go |----------------vendor |--------------------jwthi |--------------------routepa |---------pkg
- platform中的包编译过程中,如果引用到了外部包jwthi和routepa,则会在vendor中查找,如果找不到则报错,如果找的到则正常编译.
- jwthi与routepa一定要是全路径名称,如果应用的是github.com/jwthi.那么vendor页需要先创建github.com,在github.com下创建jwthi.以此类推.
注意事项:
- vendor只能在package中存在.不能超越这个范围.如上边的示例中,vendor目录在github.com中存在,不能直接在src中与github.com平级.原因是:vendor必须在package中.github.com就是一个最顶层的包.
- vendor可以嵌套使用.就是在你引入的包中,也可能存在vendor目录.使用vendor方式,打包外部依赖,是一个很不错的包发布方式.
- 通过vendor将包的版本保存下来,有助于降低包版本不一致导致的”误会”. go get默认情况下,会去下载最新的包.如果api发生的变化,则就可能产生误会.
有一个工具,可以辅助的帮助我们进行vendor管理
go get -u -v github.com/kardianos/govendor
- 这个工具,可以帮助我们初始化vendor信息.他会创建一个vendor.json的文件.辅助我们管理引用包.
- 这个工具的使用,请参考baidu,google
- 没有这个工具,也可以正常的使用vendor包管理器,只要GO15VENDOREXPERIMENT=1即可.手动的将应用包拷贝到vendor目录中.如果使用工具,可以自动的对包进行拷贝.个人感觉,自己动手丰衣足食.
附录
以上内容,纯属个人愚见,如果不对的地方,请及时拍砖,以免误人子弟.诚邀指点.
E-mail:hzwy23@163.com