1. 程式人生 > >go 依賴管理利器 -- govendor

go 依賴管理利器 -- govendor

長期以來,golang 對外部依賴都沒有很好的管理方式,只能從 $GOPATH 下查詢依賴。這就造成不同使用者在安裝同一個專案適合可能從外部獲取到不同的依賴庫版本,同時當無法聯網時,無法編譯依賴缺失的專案。

自 1.5 版本開始引入 govendor 工具,該工具將專案依賴的外部包放到專案下的 vendor 目錄下(對比 nodejs 的 node_modules 目錄),並通過 vendor.json 檔案來記錄依賴包的版本,方便使用者使用相對穩定的依賴。

對於 govendor 來說,主要存在三種位置的包:專案自身的包組織為本地(local)包;傳統的存放在 $GOPATH 下的依賴包為外部(external)依賴包;被 govendor 管理的放在 vendor 目錄下的依賴包則為 vendor 包。

具體來看,這些包可能的型別如下:

狀態 縮寫狀態 含義
+local l 本地包,即專案自身的包組織
+external e 外部包,即被 $GOPATH 管理,但不在 vendor 目錄下
+vendor v 已被 govendor 管理,即在 vendor 目錄下
+std s 標準庫中的包
+unused u 未使用的包,即包在 vendor 目錄下,但專案並沒有用到
+missing m 程式碼引用了依賴包,但該包並沒有找到
+program p 主程式包,意味著可以編譯為執行檔案
+outside 外部包和缺失的包
+all 所有的包

常見的命令如下,格式為 govendor COMMAND

通過指定包型別,可以過濾僅對指定包進行操作。

命令 功能
init 初始化 vendor 目錄
list 列出所有的依賴包
add 新增包到 vendor 目錄,如 govendor add +external 新增所有外部包
add PKG_PATH 新增指定的依賴包到 vendor 目錄
update 從 $GOPATH 更新依賴包到 vendor 目錄
remove 從 vendor 管理中刪除依賴
status 列出所有缺失、過期和修改過的包
fetch 新增或更新包到本地 vendor 目錄
sync 本地存在 vendor.json 時候拉去依賴包,匹配所記錄的版本
get 類似 go get
 目錄,拉取依賴包到 vendor 目錄