govendor 是一個基於 vendor 機制實現的 Go 包依賴管理命令行工具。與原生 vendor 無侵入性融合,也支持從其他依賴管理工具遷移,可以很方便的實現同一個包在不同項目中不同版本、以及無相互侵入的開發和管理。
最開始的時候,Go 並沒有提供較為妥當的包管理工具。從 1.5 版本開始提供了 vendor 特性,但需要手動設置環境變量 GO15VENDOREXPERIMENT=1。
在執行 go build 或 go run 命令時,會按照以下順序去查找包:
在發布 1.6 版本時,該環境變量的值已經默認設置為 1 了,該值可以使用 go env 命令查看。
在發布 1.7 版本時,已去掉該環境變量,默認開啟 vendor 特性。
govendor 是一個基於 vendor 目錄機制的包管理工具。
支持從項目源碼中分析出依賴的包,並從 $GOPATH 複製到項目的 vendor 目錄下
支持包的指定版本,並用 vendor/vendor.json 進行包和版本管理,這點與 PHP 的 Composer 類似
支持用 govendor add/update 命令從 $GOPATH 中複製依賴包
如果忽略了 vendor/*/ 文件,可用 govendor sync 恢復依賴包
可直接用 govendor fetch 添加或更新依賴包
可用 govendor migrate 從其他 vendor 包管理工具中一鍵遷移到 govendor
支持 Linux,macOS,Windows,甚至現有所有作業系統
支持 Git、Hg、SVN,BZR(必須指定一個路徑)
要求: - 項目必須在 $GOPATH/src 目錄下 - 如果 Go 版本為 1.5,則必須手動設置環境變量 set GO15VENDOREXPERIMENT=1
go get -u github.com/kardianos/govendor為了方便快捷使用 govendor,建議將 $GOPATH/bin 添加到 PATH 中。Linux/macOS 如下設置:
export PATH="$GOPATH/bin:$PATH"初始化
在項目根目錄下執行以下命令進行 vendor 初始化:
項目根目錄下即會自動生成 vendor 目錄和 vendor.json 文件。此時 vendor.json 文件內容為:
{ "comment": "", "ignore": "test", "package": [], "rootPath": "govendor-example"}常用命令govendor add gopkg.in/yaml.v2e github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unixe github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unixs fmt ├── e github.com/gin-contrib/sse ├── e github.com/gin-gonic/gin ├── e github.com/gin-gonic/gin/render ├── e github.com/golang/protobuf/proto ├── e github.com/ugorji/go/codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-examplegovendor fetch golang.org/x/net/contextgovendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55govendor fetch golang.org/x/net/context@v1 govendor fetch golang.org/x/net/context@=v1govendor install +vendor,^programgovendor update -uncommitted <updated-package-import-path>govendor fetch github.com/normal/pkg::github.com/myfork/pkg此時將從 myfork 拉取代碼,而不是 normal。
各子命令詳細用法可通過 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 實現的包管理工具中一鍵遷移get與 go get 類似,將包下載到 $GOPATH,再將依賴包複製到 vendor 目錄license列出所有依賴包的 LICENSEshell可一次性運行多個 govendor 命令狀態縮寫含義+locall本地包,即項目內部編寫的包+externale外部包,即在 GOPATH 中、卻不在項目 vendor 目錄+vendorv已在 vendor 目錄下的包+stds標準庫裡的包+excludedx明確被排除的外部包+unusedu未使用的包,即在 vendor 目錄下,但項目中並未引用到+missingm被引用了但卻找不到的包+programp主程序包,即可被編譯為執行文件的包+outside
相當於狀態為 +external +missing+all
所有包支持狀態參數的子命令有:list、add、update、remove、fetch
普大喜奔的是,從 Go 1.11 版本開始,官方已內置了更為強大的 Go modules 來一統多年來 Go 包依賴管理混亂的局面(Go 官方之前推出的 dep 工具也幾乎胎死腹中),並且將在 1.13 版本中正式默認開啟。
目前已受到社區的看好和強烈推薦,建議新項目採用 Go modules。
govendor 項目
golang使用vendor目錄來管理依賴包
Golang包管理工具之govendor的使用
出處:http://u6.gg/sDe3r
Golang零基礎入門課程
本課程為:網絡班
6.15正式開班上課
golang 課程 6 月15 日開課,想要學習的小夥伴可以掃碼諮詢
添加小助手WeChat:17812796384