1. 程式人生 > >使用govendor管理golang專案依賴

使用govendor管理golang專案依賴

最近在專案開發過程中,遇到一個問題,當代碼編寫完成後,執行go run 時,提示如下錯誤:

大概意思就是我有golang.org/x/net/trace的兩個副本,且提示了,可以通過vendor的副本解決。見鬼了,我哪來的golang.org/x/net/trace兩個副本?仔細觀察,才發現,我之前已經安裝了golang.org/x/net/trace,然後專案開發使用了etcd,該原始碼目錄下有個vendor子目錄,裡面包含了目錄如下:

在網上查閱才知道,假設有如下場景:

你的工程引用了一些外部包,且這些包仍有更新的可能,或者你們專案組另外開發一些公用包,且還在並行開發迭代中,如果你的專案程式碼本來執行穩定,卻因為外部包的更新導致執行出現問題,你是不是很鬱悶?所以為了開發時或者部署時,將外部包版本確定,在go1.6之後引入vendor目錄,即你的專案工程中,多了個vendor目錄,執行go build的時候,會在vendor目錄下邊尋找你引用的外部包,這樣每次編譯的時候,當外部包修改,測試通過後,將新的外部包內容替換到vendor中,不斷的迭代更新,保證了外部包的穩定,也不會影響到你當前的程式碼了。

我使用的工具是govendor,通過如下命令安裝:

go get -u -v github.com/kardianos/govendor

使用方法:

1.在專案目錄下執行govendor init

2.govendor add +external或govendor add +e

這樣,專案目錄則多了個vendor目錄,裡面包含了專案引用的外部包了。

當然,這裡的前提是,你的GOPATH本來就已經安裝了這些外部包,govendor的工作只是將你專案中引用的外部包,從GOPATH拷貝到了你專案的vendor目錄下。

govendor常用的命令如下:

init     建立 vendor 資料夾和 vendor.json 檔案
list     列出已經存在的依賴包
add      從 $GOPATH 中新增依賴包,會加到 vendor.json
update   從 $GOPATH 升級依賴包
remove   從 vendor 資料夾刪除依賴
status   列出本地丟失的、過期的和修改的package
fetch   從遠端庫增加新的,或者更新 vendor 檔案中的依賴包