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裏面的版本號