godep使用


安裝:

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變量中


增加新的依賴包:

  1. Run go get foo/bar
  2. Edit your code to import foo/bar.
  3. Run godep save (or godep save ./…).

如果要更新依賴包:

  1. Run go get -u foo/bar
  2. 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中去找依賴包。


參考:
1、https://www.jianshu.com/p/db59b10c8c51
2、https://ieevee.com/tech/2017/07/10/go-import.html#vendor


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM