1、为何要包管理git
默认Go的第三方包都是放在Gopath的src目录下,并且这些包都没有版本号的概念,这样的可能会出现一些问题。github
举个例子:当A同事将开发完程序以后,此时可能引用了一个第三方的包,过了不久以后,B同事接手了该项目,此时若是B同事经过go get 命令获取了包,并且包的版本进行了升级,恰巧这个包又不兼容之前的版本,这就会致使程序编译错误等问题。或者当这个维护的第三方包删除了,那么B同窗则不能下载到该包。golang
由上面的例子就能知道,为何须要进行包的依赖管理了。shell
go里面进行包依赖管理的工具备几个。godep就是其中之一。json
2、安装godep工具
1.安装方法: go get github.com/tools/godepui
2.验证是否安装成功:在shell里面键入 godep ,应该会出现帮助信息。rest
Usage: godep command [arguments] The commands are: save list and copy dependencies into Godeps //save命令主要是用于保存当前的依赖 go run the go tool with saved dependencies //主要是用于执行Go程序,至关于在原来的go命令上套了一层,由于涉及到了包管理 get download and install packages with specified dependencies //get命令主要是用于获取当前指定的依赖包 path print GOPATH for dependency code restore check out listed dependency versions in GOPATH //把依赖的包都下载到Gopath当中 update update selected packages or the go version //更新依赖的包 diff shows the diff between current and previously saved set of dependencies version show version info
3、演示如何使用godepcode
以下项目使用了第三方的包,那么咱们就可使用godep进行包管理blog
1. 在项目根目录,执行godep save 命令,若是执行成功,则会生成两个文件夹 Godeps 和 vendor
godep save 会把当前包所依赖的全部第三方包扫描出来,而后将源代码放在vendor目录下。
GoDeps保存的是第三方包的依赖信息
Vendor保存全部依赖的第三方包
能够查看一下Godep.json
{ "ImportPath": "godepDemo/protobuf", "GoVersion": "go1.10", "GodepVersion": "v80", "Deps": [ { "ImportPath": "github.com/golang/protobuf/proto", "Comment": "v1.3.2-1-g4c88cc3f", "Rev": "4c88cc3f1a34ffade77b79abc53335d1e511f25b" } ] }
Deps这一个字段里面保存着当前依赖包的路径、git提交的版本号信息。下次在拉下代码以后,执行Go build 就会执行Vendor里面的代码,这样就不再用担忧代码不一致的问题。
备注:当引用的第三方包要升级了怎么办,那么就修改Godep.json里面的提交的版本号就好了。
Godep是怎么实现版本管理的,能够参考下面这个图。
总结如何使用godep
1.保证程序可以正常编译
2.执行godep save 命令,执行以后会将全部的依赖的第三方包扫描出来,生成Godeps和Vendor目录
3.提交上面两个文件夹到本身的代码库,提交以后咱们代码中的第三方依赖就固定下来了。
4.若是须要更新依赖的版本,那么直接更新godep.json里面的第三方包的版本号,而后再执行一次godep save,最后提交到咱们的代码库就好了。
例如:能够查看一下我依赖的protobuf的commitId
而后更新一下Godeps.json里面的版本号