Gost
項(xiàng)目地址:https://github.com/byte16/gost
gost
是一個(gè)用于Go語(yǔ)言的簡(jiǎn)單工具。它可以以一種簡(jiǎn)潔輕便的方式來(lái)幫助你管理GOPATH并運(yùn)行Go命令框喳。如果你同時(shí)開(kāi)發(fā)多個(gè)Go項(xiàng)目浦旱,并且因?yàn)槟承┰蜻@些項(xiàng)目基于相互隔離的不同工作空間(例如這些項(xiàng)目基于某些相同依賴的不同版本)蹋艺,這導(dǎo)致你在運(yùn)行Go命令的時(shí)候需要在不同的GOPATH間來(lái)回切換谢肾,那么gost
對(duì)于你來(lái)說(shuō)將非常有用浦马。它可以用于持續(xù)交付和持續(xù)集成的工具鏈中迅栅,也可以作為Gogland這樣可以在項(xiàng)目層級(jí)來(lái)管理GOPATH的集成開(kāi)發(fā)工具在命令行方面的補(bǔ)償(Gogland無(wú)法為命令行終端切換GOPATH)善炫。
gost
是對(duì)Go命令的一個(gè)封裝。它可以幫你實(shí)時(shí)設(shè)置GOPATH并運(yùn)行Go命令库继。 gost
維護(hù)了一個(gè)路徑的倉(cāng)庫(kù)箩艺,這個(gè)倉(cāng)庫(kù)是基于一個(gè)位于當(dāng)前用戶Home目錄下的名為.gost.toml
的toml文件建立的。 我們可以把這個(gè)路徑倉(cāng)庫(kù)叫做pathspace 宪萄,可以使用像gost add
艺谆, gost ls
和 gost rm
這些被精心設(shè)計(jì)的命令來(lái)對(duì)它進(jìn)行管理。你也可以在每次運(yùn)行gost
命令的時(shí)候通過(guò)--config
來(lái)指定使用一個(gè)位于其它位置的.gost.toml
文件拜英,但是并不推薦這么做静汤,因?yàn)檫@樣可能會(huì)導(dǎo)致混亂。
安裝
通過(guò)下面的命令來(lái)下載并安裝gost
:
$ go get github.com/byte16/gost
這將在你的$GOPATH/bin
目錄下生成一個(gè)gost可執(zhí)行文件居凶。你可以將它轉(zhuǎn)移到一個(gè)位于$PATH
中的永久目錄虫给,這樣不論$GOPATH
被修改成什么,你都可以正常使用gost
侠碧。
你也可以在本項(xiàng)目的分發(fā)頁(yè)面中直接下載gost的可執(zhí)行文件:
https://github.com/byte16/gost/releases
使用入門(mén)
管理 pathspace
任何你想要用作GOPATH的路徑都需要首先被放入pathspace抹估。你可以像這樣來(lái)添加一個(gè)路徑:
$ gost add foo /home/foobar/bar
當(dāng)你通過(guò)gost add
向pathspace中添加路徑的時(shí)候,gost
會(huì)要求你為所添加的路徑取一個(gè)名稱弄兜。 在上面的示例中药蜻,foo
就是為路徑/home/foobar/bar
所取的名稱。在使用gost
來(lái)運(yùn)行一個(gè)go命令的時(shí)候替饿,你可以通過(guò)所取的名稱來(lái)指定使用哪個(gè)路徑作為GOPATH语泽。每個(gè)名稱在pathspace中都應(yīng)該是唯一的。如果一個(gè)名稱已經(jīng)在pathspace中用于命名一個(gè)路徑视卢,當(dāng)在運(yùn)行gost add
命令時(shí)你將這個(gè)名稱再用于命名新的路徑的時(shí)候踱卵,那么pathspace中的原有路徑條目信息將會(huì)被覆蓋。
注意: 在你把一個(gè)路徑添加到pathspace之前据过,你需要首先確認(rèn)這個(gè)路徑所代表的目錄確實(shí)存在惋砂。gost
對(duì)包含軟鏈接的路徑支持良好妒挎。
gost
支持像/home/foo/bar
這樣的單路徑和像/home/foobar/baz:/home/foobar/quz
(這是Linux下的一個(gè)示例)這樣的路徑列表。在不同的操作系統(tǒng)中班利,路徑列表分隔符是不同的饥漫。請(qǐng)確保你使用了正確的路徑列表分隔符。當(dāng)你需要把一個(gè)包含路徑列表的路徑條目添加到pathspace中的時(shí)候罗标,需要使用--multi
(或簡(jiǎn)寫(xiě)作-m
)來(lái)顯式告知gost
庸队。下面是一個(gè)示例:
$ gost add foobar /home/foobar/foo:/home/foobar/bar -m
你可以使用 gost ls
來(lái)查看pathspace中的路徑條目的詳細(xì)信息。如果你確定某些路徑條目已經(jīng)無(wú)用闯割,你可以使用gost rm
來(lái)將它們從pathspace中移除彻消。下面是操作示例:
$ gost ls
* Name: foo
Path: /home/foobar/bar
RealPath: /home/foobar/bar # 如果Path包含軟鏈接,RealPath將會(huì)是對(duì)應(yīng)的實(shí)際路徑
Multi: false
* Name: foobar
Path: /home/foobar/foo:/home/foobar/bar
RealPath: /home/foobar/foo:/home/foobar/bar # RealPath是gost自動(dòng)解析出來(lái)的
Multi: true
$ gost ls foo # gost ls 也支持一個(gè)或多個(gè)名稱作為參數(shù)
* Name: foo
Path: /home/foobar/bar
RealPath: /home/foobar/bar
Multi: false
$ gost rm foobar # gost rm 也支持一個(gè)或多個(gè)名稱作為參數(shù)
$ gost ls
* Name: foo
Path: /home/foobar/bar
RealPath: /home/foobar/bar
Multi: false
運(yùn)行Go命令
使用gost
設(shè)置GOPATH并運(yùn)行一條Go命令操作非常簡(jiǎn)單宙拉。只需要記住你用來(lái)設(shè)置GOPATH的路徑已經(jīng)被添加到了pathspace宾尚。比如上面的示例,你已經(jīng)把/home/foobar/bar
添加到了pathspace中并命名為foo
谢澈,現(xiàn)在你想要把/home/foobar/bar
設(shè)置為GOPATH并運(yùn)行下面的Go命令:
$ go get -u github.com/byte16/gost
通常在以前沒(méi)有使用gost
的時(shí)候煌贴,你首先需要通過(guò)執(zhí)行export GOPATH=/home/foobar/bar
命令或者將該命令添加到$HOME/.bash_profile
并執(zhí)行source $HOME/.bash_profile
來(lái)設(shè)置GOPATH。現(xiàn)在使用gost
你無(wú)須像上面那樣操作锥忿。 你只需要運(yùn)行下面的命令即可::
$ gost get -p foo -- -u github.com/byte16/gost
切換GOPATH和運(yùn)行go get
命令的任務(wù)完全由gost
來(lái)進(jìn)行執(zhí)行牛郑。除了使用gost
所帶來(lái)的簡(jiǎn)便,你體會(huì)不到這兩種方式之間在功能上會(huì)有什么差異敬鬓。然而淹朋,你還可以使操作更加簡(jiǎn)單。如果/home/foo/bar
已經(jīng)作為一條單目錄條目被添加到pathspace中了钉答,并且你當(dāng)前的工作目錄位于/home/foo/bar/src
路徑下的任意層級(jí)的子目錄础芍,你可以運(yùn)行gost get
而無(wú)需通過(guò)--path
或-p
來(lái)指定foo
,操作如下:
$ gost get -- -u github.com/byte16/gost
gost
會(huì)自動(dòng)探測(cè)使用pathspace中的哪個(gè)路徑來(lái)作為GOPATH数尿。
但是仑性,如果你想要將一條包含路徑列表的路徑條目(如/home/foobar/foo:/home/foobar/bar
)來(lái)設(shè)置為GOPATH并運(yùn)行Go命令的話,--path
(或簡(jiǎn)寫(xiě)作-p
)標(biāo)志不能被省略砌创。
順便提示虏缸,雙橫線標(biāo)記--
是用來(lái)告訴gost
--
標(biāo)記后的標(biāo)志和參數(shù)需要被直接傳遞給底層的Go命令。所以請(qǐng)不要省略該標(biāo)記嫩实。
現(xiàn)在gost
支持Go的所有功能性命令,對(duì)應(yīng)的gost
命令與底層的Go命令有相同的名稱窥岩。這些命令如下所示:
build 構(gòu)建包和依賴
clean 移除對(duì)象文件
doc 顯示包或者標(biāo)識(shí)符的文檔
env 打印Go環(huán)境信息
bug 開(kāi)始報(bào)告bug
fix 對(duì)包運(yùn)行g(shù)o工具fix
fmt 對(duì)包的源文件運(yùn)行g(shù)ofmt
generate 通過(guò)處理源代碼來(lái)生成Go文件
get 下載并安裝包和依賴
install 編譯并安裝包和依賴
list 列出包列表
run 編譯并運(yùn)行g(shù)o程序
test 對(duì)包進(jìn)行測(cè)試
tool 運(yùn)行指定的go工具
vet 對(duì)包運(yùn)行g(shù)o工具vet
關(guān)于如何通過(guò)gost
來(lái)運(yùn)行這些命令的詳細(xì)細(xì)節(jié)甲献, 可以運(yùn)行gost help 命令名稱
來(lái)查看。 例如:
$ gost help install
usage: gost install [-p | --path {pathName}] -- [goFlags] [goArgs]
Set specified path as GOPATH and run 'go install'. If no path has been
specified, gost would try to check if current working directory was under
any single path in its pathspace. And if gost found one, it would set it
as the GOPATH and then run 'go install'. If you want to use a multiple path
like '/home/foo/bar:home/foo/baz', it's a must to use -p or --path to
specify the pathName defined in pathspace.
[-p | --path {pathName}]
It's used to specify the path to set as GOPATH before running the
corresponding go command.
[goFlags] [goArgs]
These content following '--' would be passed directly to the underlying
go command.
example: gost install -p foobar -- -n github.com/baz/qux
*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*
| Below is the help info of corresponding go command: |
*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*
usage: go install [build flags] [packages]
Install compiles and installs the packages named by the import paths,
along with their dependencies.
For more about the build flags, see 'go help build'.
For more about specifying packages, see 'go help packages'.
See also: go build, go get, go clean.
貢獻(xiàn)代碼
如果您能向該項(xiàng)目貢獻(xiàn)代碼颂翼,維護(hù)者將不勝感激晃洒。當(dāng)您發(fā)現(xiàn)問(wèn)題或者想要貢獻(xiàn)代碼慨灭,可以生成一個(gè) issue 或一個(gè)pull request.
協(xié)議
Gost基于MIT 協(xié)議進(jìn)行分發(fā)。 詳見(jiàn)協(xié)議
聲明
本文為項(xiàng)目作者原創(chuàng)球及,您可以自由轉(zhuǎn)發(fā)氧骤,但請(qǐng)標(biāo)注來(lái)源,非常感謝吃引!
項(xiàng)目地址:https://github.com/byte16/gost