go中的godep
本文參考:http://www.cnblogs.com/me115/p/5528463.html#h20
http://studygolang.com/articles/4385
關於Godep
發現好多golang項目都使用到godep作為包管理的工具,像比較大型的項目,比如kubernetes這種,都是使用的是godep來進行依賴管理操作的了,看了一下有點像maven的感覺
安裝:
go get github.com/tools/godep
編譯和運行
項目用godep管理后,要編譯和運行項目的時候再用go run和go build顯然就不行了,因為go命令是直接到GOPATH目錄下去找第三方庫。 而使用godep下載的依賴庫放到Godeps/workspace目錄下的;
godep go run main.go godep go build godep go install godep go test
godep中的go命令,就是將原先的go命令加了一層殼,執行godep go的時候,會將當前項目的workspace目錄加入GOPATH變量中;
godep save
godep save將項目中使用到的第三方庫復制到項目的Godeps目錄下。
godep save 會自動掃描當前目錄所屬包中import的所有外部依賴庫(非系統庫),並查看其是否屬於某個代碼管理工具(比如git,hg)。若是,則把此庫獲取路徑和當前對應的revision(commit id)記錄到當前目錄Godeps下的Godeps.json,同時,把不含代碼管理信息(如.git目錄)的代碼拷貝到Godeps/_workspace/src下,用於后繼godep go build等命令執行時固定查找依賴包的路徑。
因此,godep save能否成功執行需要有兩個要素: 當前或者需掃描的包均能夠編譯成功:因此所有依賴包事先都應該已經或go get或手工操作保存到當前GOPATH路徑下 依賴包必須使用了某個代碼管理工具(如git,hg):這是因為godep需要記錄revision
godep restore
如果下載的項目中只有Godeps.json文件,而沒有包含第三庫則可以使用godep restore這個命令將所有的依賴庫下來下來到GOPATH的src中。
godep restore
godep restore執行時,godep會按照Godeps/Godeps.json內列表,依次執行go get -d -v 來下載對應依賴包到GOPATH路徑下,因此,如果某個原先的依賴包保存路徑(GOPATH下的相對路徑)與下載url路徑不一致,比如kuberbetes在github上路徑是github.com/kubernetes,而代碼內import則是k8s.io,則會導致無法下載成功,也就是說godep restore不成功。這種只能手動,比如手動創建$GOPATH/k8s.io目錄,然后git clone。
golang自帶包管理工具
自帶工具:go get go get可以將依賴的第三方庫下載本GOPATH目錄,在代碼中直接import相應的代碼庫就可以了。 與godep相比,如果項目引用的第三方庫沒有列入到項目里面,安裝項目時,針對第三方庫需要使用go get一個個下載,比較麻煩;
注:使用godep restore可能導致部分庫無法下載下來;編譯會報錯: cmd/decode.go:16:2: cannot find package "github.com/CodisLabs/redis-port/pkg/libs/atomic2" in any of:
此時針對報錯的特定庫再go get一般都能下載: go get github.com/CodisLabs/redis-port/pkg/libs/atomic2
godep支持的命令
save list and copy dependencies into Godeps go run the go tool with saved dependencies get download and install packages with specified dependencies path print GOPATH for dependency code restore check out listed dependency versions in 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
筆記
1.執行godep save
,此時會生成Godeps文件夾,同時將引用的放入vendor文件夾中。
轉自:https://www.cnblogs.com/zuxingyu/p/6015715.html