govendor包管理工具

包管理工具govendor

一、go找包邏輯

在執行 go buildgo run 命令時,會按照以下順序去查找包:

  • 當前包下的 vendor 目錄
  • 向上級目錄查找,直到找到 src 下的 vendor 目錄
  • GOROOT 目錄下查找
  • GOPATH 下面查找依賴包

二、vendor使用建議

  • 一個庫工程(不包含 mainpackage)不應該在自己的版本控制中存儲外部的包在 vendor 目錄中,除非有特殊原因並且知道爲什麼要這麼做。
  • 在一個應用中,(包含 mainpackage),建議只有一個 vendor 目錄,且在代碼庫一級目錄。

三、govendor 簡介

govendor 是一個基於 vendor 目錄機制的包管理工具。

  • 支持從項目源碼中分析出依賴的包,並從 $GOPATH 複製到項目的 vendor 目錄下
  • 支持包的指定版本,並用 vendor/vendor.json 進行包和版本管理,這點與 PHP 的 Composer 類似
  • 支持用 govendor add/update 命令從 $GOPATH 中複製依賴包
  • 如果忽略了 vendor/*/ 文件,可用 govendor sync 恢復依賴包
  • 可直接用 govendor fetch 添加或更新依賴包
  • 可用 govendor migrate 從其他 vendor 包管理工具中一鍵遷移到 govendor
  • 支持 LinuxmacOSWindows,甚至現有所有操作系統
  • 支持 GitHgSVNBZR(必須指定一個路徑)

go中所有的project代碼都要放在GoPATH下的src目錄下,因而會存在全局GoPATH和項目的GoPATH。本地開發,可以直接都放在全局的GoPATH下,然後每個項目用govendor的方式添加相關依賴包

我們可以直接在命令行輸入如下命令
go get -u github.com/kardianos/govendor
進行安裝
接着使用一套連招:

govendor init # 創建vendor目錄,創建vendor.json文件  
govendor add +external #生成依賴包(添加外部包,不包含項目代碼)  
govendor update +vendor # 更新vendor的包命令

命令解析:

狀態 縮寫狀態 含義
+local l 本地包,即項目自身的包組織
+external e 外部包,即被 $GOPATH 管理,但不在 vendor 目錄下
+vendor v 已被 govendor 管理,即在 vendor 目錄下
+std s 標準庫中的包
+unused u 未使用的包,即包在 vendor 目錄下,但項目並沒有用到
+missing m 代碼引用了依賴包,但該包並沒有找到
+program p 主程序包,意味着可以編譯爲執行文件
+outside 外部包和缺失的包
+all 所有的包
命令 功能
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 目錄

命令舉例:

govendor add +local   #會將本地的項目包(代碼)也添加到vendor目錄下 

# 拉取最新包(指定版本,按版本拉,不指定按最新拉)
govendor fetch github.com/astaxie/beego@=v1.10.0

# 同步依賴包(如果某個包誤刪,verdor.json存在即可依其進行拉取)
govendor sync
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章