govendor 是乙個基於vendor
機制實現的 go 包依賴管理命令列工具。與原生 vendor 無侵入性融合,也支援從其他依賴管理工具遷移,可以很方便的實現同乙個包在不同專案中不同版本、以及無相互侵入的開發和管理。
最開始的時候,go 並沒有提供較為妥當的包管理工具。從 1.5 版本開始提供了 vendor 特性,但需要手動設定環境變數go15vendorexperiment=1
。
在執行go build
或go run
命令時,會按照以下順序去查詢包:
在發布 1.6 版本時,該環境變數的值已經預設設定為 1 了,該值可以使用go env
命令檢視。
在發布 1.7 版本時,已去掉該環境變數,預設開啟vendor
特性。
govendor 是乙個基於vendor
目錄機制的包管理工具。
要求:
go get -u github.com/kardianos/govendor
為了方便快捷使用govendor
,建議將$gopath/bin
新增到 path 中。linux/macos 如下設定:
export path="$gopath/bin:$path"
在專案根目錄下執行以下命令進行vendor
初始化:
govendor init
專案根目錄下即會自動生成vendor
目錄和vendor.json
檔案。此時vendor.json
檔案內容為:
govendor fetch golang.org/x/net/context@=v1 # get the tag or branch named "v1".
govendor fmt +local
govendor install +local
govendor test +local
govendor install +vendor,^program
govendor fetch +out
govendor update +vendor
govendor update -uncommitted
govendor fetch github.com/normal/pkg::github.com/myfork/pkg
此時將從myfork
拉取**,而不是normal
。
govendor sync
各子命令詳細用法可通過govendor command -h
或閱讀github.com/kardianos/govendor/context
檢視原始碼包如何實現的。
子命令功能
init
建立vendor
目錄和vendor.json
檔案
list
列出&過濾依賴包及其狀態
add從$gopath
複製包到專案vendor
目錄
update
從$gopath
更新依賴包到專案vendor
目錄
remove
從vendor
目錄移除依賴的包
status
列出所有缺失、過期和修改過的包
fetch
從遠端倉庫新增或更新包到專案vendor
目錄(不會儲存到$gopath
)
sync
根據vendor.json
拉取相匹配的包到vendor
目錄
migrate
從其他基於vendor
實現的包管理工具中一鍵遷移
getlicense
列出所有依賴包的 license
shell
可一次性執行多個govendor
命令
狀態縮寫
含義+local
l本地包,即專案內部編寫的包
+external
e外部包,即在gopath
中、卻不在專案vendor
目錄
+vendor
v已在vendor
目錄下的包
+std
s標準庫里的包
+excluded
x明確被排除的外部包
+unused
u未使用的包,即在vendor
目錄下,但專案中並未引用到
+missing
m被引用了但卻找不到的包
+program
p主程式包,即可被編譯為執行檔案的包
+outside
相當於狀態為+external +missing
+all
所有包 支援狀態引數的子命令有:list
、add
、update
、remove
、fetch
普大喜奔的是,從 go 1.11 版本開始,官方已內建了更為強大的 go modules 來一統多年來 go 包依賴管理混亂的局面(go 官方之前推出的 dep 工具也幾乎胎死腹中),並且將在 1.12 版本中正式預設開啟。
目前已受到社群的看好和強烈推薦,建議新專案採用 go modules。
Go 包依賴管理工具 govendor
govendor 是乙個基於 vendor 機制實現的 go 包依賴管理命令列工具。與原生 vendor 無侵入性融合,也支援從其他依賴管理工具遷移,可以很方便的實現同乙個包在不同專案中不同版本 以及無相互侵入的開發和管理。vendor 特性 最開始的時候,go 並沒有提供較為妥當的包管理工具。從 ...
Go依賴管理工具(三)govendor
安裝方法 go get u github.com kardianos govendor用法 govendor init 初始化 vendor 目錄,生成乙個初始化的vendor.json govendor add local 加本專案中用到的dependency加到vendor.json裡面 gov...
Golang 依賴管理工具
使用 vendor 目錄 go module proxy go vendor depgo mod 使用 再探go modules 使用與細節 go的包管理工具 三 go modules go的包管理工具 四 go module proxy go 模組解惑 到處都是 go111module 這到底什麼...