Go 包依賴管理工具 govendor

2021-09-21 06:04:05 字數 4296 閱讀 4657

govendor 是乙個基於vendor機制實現的 go 包依賴管理命令列工具。與原生 vendor 無侵入性融合,也支援從其他依賴管理工具遷移,可以很方便的實現同乙個包在不同專案中不同版本、以及無相互侵入的開發和管理。

最開始的時候,go 並沒有提供較為妥當的包管理工具。從 1.5 版本開始提供了 vendor 特性,但需要手動設定環境變數go15vendorexperiment=1

在執行go buildgo 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

所有包 支援狀態引數的子命令有:listaddupdateremovefetch

普大喜奔的是,從 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 這到底什麼...