安裝:
1、mac:brew Install godep,全局可用
2、go get -u -v github.com/tools/godep
參數-u表示更新,-v可以看到進度信息。成功安裝后,在$GOPATH的bin目錄
下會有一個godep可執行的二進制文件,后面執行的命令都是用這個,建議這個目錄加入到全局環境變量中
Godeps.json文件
Godeps.json文件描述了工程依賴項。Godeps.json文件位於工程目錄的子目錄Godeps下
包管理使用 godep
工程目錄應當是$GOPATH的子目錄。以下命令都是在工程的根目錄運行
拉取依賴 restore 用於開發:godep restore
如果下載的項目中只有Godeps.json文件,而沒有包含第三庫則可以使用godep restore這個命令將所有的依賴庫下載到$GOPATH\src
中用於開發,godep restore執行時,godep會按照Godeps/Godeps.json
內列表,依次執行go get -d -v
來下載對應依賴包到GOPATH路徑下;
godep restore將Godeps/Godeps.json文件中指定的包安裝到$GOPATH目錄。
godep restore
,可以將vendor下的代碼反向拷貝到$GOPATH下。
檢出依賴 :godep save
掃描本項目的代碼,將項目依賴的包及該包的版本號(即git commit)記錄到Godeps/Godeps.json文件中;將依賴的代碼從GOPATH/src中copy到vendor目錄(忽略原始代碼的.git目錄)。
-
自動掃描當前目錄所屬包中import的所有外部依賴庫(非系統庫)
-
將所有的依賴庫下載下來到當前工程中,產生文件
Godeps\Godeps.json
-
在沒有
Godeps\
文件的情況下,生成依賴目錄vendor\
文件夾
godep save會將工程依賴項復制到工程目錄的vendor/子目錄下。在這個過程中,以下文件不會復制
- 沒有納入版本管理的文件
- *test.go
- testdata目錄
- go包外的其他文件
godep 編譯運行 build
項目用godep管理后,要編譯和運行項目的時候再用go run和go build顯然就不行
因為go命令是直接到GOPATH目錄下去找第三方庫,且在1.6以后支持
vendor
方式編譯,而使用godep下載的依賴庫放到Godeps/workspace目錄下的,但是不影響繼續使用依賴GOPATH目錄,所以與三方工具本身不沖突
故使用
godep go build XXX
godep中的go命令,就是將原先的go命令加了一層殼,執行godep go的時候,會將當前項目的workspace目錄加入GOPATH變量中
增加新的依賴包:
- Run go get foo/bar
- Edit your code to import foo/bar.
- Run godep save (or godep save ./…).
如果要更新依賴包:
- Run go get -u foo/bar
- Run godep update foo/bar. (You can use the … wildcard, for example godep update foo/…).
Godeps目錄的作用
godep save時godep把所有依賴包代碼從GOPATH路徑拷貝到Godeps目錄下,並去除代碼管理目錄。這個用處主要是為了支撐godep go tool的一系列操作,尤其是git clone了代碼庫下來后,通常直接用godep go install xxx即可完成編譯,一定程度上能夠緩解golang比較嚴格的代碼路徑和包管理帶來的煩惱。
而在使用IDE時
,可以通過把vendor
添加到GOPATH實現代碼跳轉和編譯等功能,比較方便
vendor
依賴GOPATH來解決go import有個很嚴重的問題:如果項目依賴的包做了修改,或者干脆刪掉了,會影響我的項目。
那么vendor屬性的作用就是讓go編譯時,優先從項目源碼樹根目錄下的vendor目錄查找代碼(可以理解為切了一次GOPATH),如果vendor中有,則不再去GOPATH中去查找。注意,必須將依賴包拷貝到$GOPATH/src目錄中,否則go會無視vendor目錄,仍然去$GOPATH/src中去找依賴包。
參考: