1. 程式人生 > >Golang學習筆記之依賴包管理工具gvt

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~~

三、參考資料