govendor 筆記


Govendor 是用於管理 Go 項目依賴包的工具,是基於 vendor 實現的。

一 Go 依賴包查找順序

  1. 當前目錄下的 vendor 目錄
  2. 上級目錄下的 vendor 目錄,直到 src 目錄下的 vendor 目錄
  3. ${GOPATH}/src 目錄
  4. ${GOROOT} 目錄

二 使用前提

  1. 項目必須在 ${GOPATH}/src 目錄下。
  2. Go 1.5 版本確保設置環境變量:GO15VENDOREXPERIMENT=1.

三 安裝

  1. 執行:go get -u github.com/kardianos/govendor

  2. 將 ${GOPATH}/bin 配到 PATH 中:export PATH = $PATH: $GOPATH/bin

四 初始化

進入項目根目錄,執行:govendor init.

然後,項目根目錄下會自動生成一個 vendor 目錄,目錄下有一個 vendor.json 文件,用於依賴包更新記錄。

{
	"comment": "",
	"ignore": "test",
	"package": [],
	"rootPath": "project-root"
}

五 命令示例

# 將被項目引用的、且已存在於 $GOPATH 中的包複製到 vendor 目錄
govendor add +external

# 列出項目依賴的包及包的 status
govendor list

# 列出哪些包使用了 fmt 包
govendor list -v fmt

# 從遠程倉庫直接添加或更新包到 vendor 目錄(不會複製到 $GOPATH)
govendor fetch golang.org/x/net/context

# 從遠程倉庫直接添加或更新包到 vendor 目錄,指定版本或修訂版
govendor fetch golang.org/x/net/context@a4bbc9 # context 包的修訂版 a4bbc9
govendor fetch golang.org/x/net/context@v1   # 最新的 v1 tag:v1.*.*
govendor fetch golang.org/x/net/context@=v1  # 就是 'v1' tag

# 僅格式化項目代碼
govendor fmt +local

# 僅構建編譯項目代碼
govendor install +local

# 僅測試項目的測試用例
govendor test +local

六 子命令

Govendor 子命令 說明
init govendor 初始化,創建 vendor 目錄及其下 vendor.json 文件
list 列出依賴包的及其 status
add 添加 $GOPATH 中依賴包到 vendor 目錄
update 更新 $GOPATH 中依賴包到 vendor 目錄
remove 移除 vendor 目錄依賴包
status 列出本地所有缺失、過期、修改過的包
fetch 添加或更新遠程倉庫的包到 vendor 目錄
sync 從遠程倉庫拉去與 vendor.json 文件最新記錄的包到 vendor 目錄
migrate 從其他基於 vendor 實現的包管理工具中一鍵遷移依賴包
get go get 類似,將包下載到 $GOPATH,再複製到 vendor 目錄
license 列出所有依賴包的 LICENSE
shell 可一次性運行多個 govendor 命令

七 包狀態

status 簡稱 說明
+local l 項目內編寫的包
+external e, ext 項目引用的包,不在項目內,但是在 $GOPATH
+vendor v vendor 目錄中的包
+std s 標準庫中的包
+excluded x, exc 被明確排除在 vendor 外的 external
+unused u 在 vendor 中,但未被項目引用的包
+missing m 被項目引用,卻找不到的包
+program p 可被編譯成執行文件的主程序包
+outside external 包、或 missing
+all 所有包

Status 可以組合使用

  • +local, program: local AND program 包
  • +local +vendor: local OR vendor 包
  • +vendor, program +std: (vendor AND program) OR std 包
  • +vendpr ^program: vendor AND NOT program 包

八 包限定符

  • github.com/kardianos/govendor: 指定單個包和單個文件夾
  • github.com/kardianos/govendor/...: 指定 govendor 和該路徑下所有被引用的包
  • github.com/kardianos/govendor/^: 指定 govendor 和所有子文件夾
  • github.com/kardianos/govendor/^::github.com/myself/govendor: 和上條類似,但取自用戶 ‘myself’
  • github.com/kardianos/govendor/...@abc12032: 所有被引用的包,修訂版abc12032
  • github.com/kardianos/govendor/...@v1: 所有被引用的包,取最新v1 tag,如v1.4.3
  • github.com/kardianos/govendor/...@=v1: 所有被引用的包,就取v1

可以使用 status 和包限定符的子命令:

  • list
  • add
  • update
  • remove
  • fetch

參考鏈接
https://github.com/kardianos/govendor
https://shockerli.net/post/go-package-manage-tool-govendor/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章