Golang學習筆記之依賴包管理工具gvt
一、gvt概念
gvt全稱為Go vendoring tool,可譯為Go供應工具,或者意譯為Go依賴包依賴包工具,whatever~~,簡單來說就是可以方便的獲取、更新、刪除專案所依賴的工具包,這個特性在Go1.5之前並不支援,1.5版本中需要設定GO15VENDOREXPERIMENT=1才可以使用,1.6之後預設加入vendor屬性,執行時Go會自動先在vendor目錄下尋找依賴, 找不到才會在GOPATH路徑下尋找依賴。這個gvt工具類似於Java裡的maven,可以非常便捷的對專案依賴包進行管理,大大簡化依賴包管理操作。
二、gvt的安裝與使用
安裝:一條命令即可
go get -u github.com/FiloSottile/gvt
使用:
前面已經提到過,gvt工具會把專案依賴的包fetch到專案vendor資料夾下,那麼gvt怎麼zi'd知道需要哪些依賴呢?使用gvt時會在vendor資料夾下生成一個manifest檔案,這個檔案裡的內容即為依賴包的地址,格式如下:
{ "version": 0, "dependencies": [ { "importpath": "github.com/PuerkitoBio/goquery", "repository": "https://github.com/PuerkitoBio/goquery", "revision": "2e29ea41f0d13f4a303c75553f4eeadddc7a4c56", "branch": "master" }, { "importpath": "golang.org/x/text/runes", "repository": "https://github.com/golang/text", "revision": "dafb3384ad25363d928a9e97ce4ad3a2f0667e34", "branch": "master", "path": "/runes" }, { "importpath": "golang.org/x/text/transform", "repository": "https://github.com/golang/text", "revision": "dafb3384ad25363d928a9e97ce4ad3a2f0667e34", "branch": "master", "path": "/transform" } ] }
其中importpath指明瞭包的路徑,repository指明瞭包所在的倉庫,revision指明的包的ban'版本,branch為具體的分支。這個manifest檔案其實就類似於maven裡的pom.xml檔案,熟悉Java的朋友一看便知。
1)基本命令:
gvt command [arguments]
command有以下幾個:
fetch //獲取一個遠端依賴
restore //從manifest中恢復依賴
update //更新一個本地依賴
list //以行為單位列出所有依賴
delete //刪除一個本地依賴
2)獲取一個遠端依賴
gvt fetch [-branch branch] [-revision rev | -tag tag] [-precaire] [-no-recurse] [-t|-a] importpath
a)由於分支的獲取時遞迴進行的,因此若一個子路徑下的包已經存在,則子包會被刪除以防止chu'出現衝突,例如若本地已經存在一個包example.com/a/b,則當 example.com/a被fetch時,原來的子包會被刪除。
b)path也可以是一個url,以此解決私有倉庫不能huo獲取依賴的問題
c)引數詳解
-t
//獲取also_tes.go檔案和測試資料
-a
//獲取所有檔案和子資料夾,但是.git, .hg and .bzr會被忽略
-branch branch
//獲取名為branch的分支。gvt update命令也會使用到,若不提供該引數,使用預設分支
-no-recurse
//非遞迴獲取依賴
-tag tag
//獲取指定標籤的依賴
-revision rev
//從分支或倉庫中獲取指定版本的依賴,預設拉取最新版本的依賴包
-precaire
//允許使用不安全的協議
3)從manifest恢復依賴
gvt restore [-precaire] [-connections N]
引數:
-precaire
//允許使用不安全的協議
-connections
//指定可以並行下載的數量
4)更新一個本地依賴
gvt update [ -all | importpath ]
將會拉取最新資料,並且只有通過branch, 以及沒有使用 -tag 或者-revision時才能才能進行更新
如果要通過分支進行更新,或者從一個tag/revision更新到另一個,則需要先delete依賴後再進行更新
引數:
-all
//更新manifest裡的所有依賴
-precaire
//允許使用不安全的協議
5)以行的方式列出依賴
gvt list [-f format]
引數:
-f
//控制列印每個manifest實體的模板格式,若沒有該引數,則預設列印格式為 "{{.Importpath}}\t{{.Repository}}{{.Path}}\t{{.Branch}}\t{{.Revision}}"
6)刪除一個本地依賴
gvt delete [-all] importpath
該命令從vendor資料夾和manifest檔案中移除一個依賴
引數:
-all
//刪除所有依賴
以上就是gvt的簡單使用jie'介紹,希望benefit you~~