Gost -- 一個(gè)極簡(jiǎn)且有用的GOPATH管理工具

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筹陵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镊尺,更是在濱河造成了極大的恐慌朦佩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庐氮,死亡現(xiàn)場(chǎng)離奇詭異语稠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)弄砍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)仙畦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人音婶,你說(shuō)我怎么就攤上這事慨畸。” “怎么了桃熄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵先口,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瞳收,道長(zhǎng)碉京,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任螟深,我火速辦了婚禮谐宙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘界弧。我一直安慰自己凡蜻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布垢箕。 她就那樣靜靜地躺著划栓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪条获。 梳的紋絲不亂的頭發(fā)上忠荞,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼委煤。 笑死堂油,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碧绞。 我是一名探鬼主播府框,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讥邻!你這毒婦竟也來(lái)了迫靖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤计维,失蹤者是張志新(化名)和其女友劉穎袜香,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鲫惶,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜈首,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欠母。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欢策。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赏淌,靈堂內(nèi)的尸體忽然破棺而出踩寇,到底是詐尸還是另有隱情,我是刑警寧澤六水,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布俺孙,位于F島的核電站,受9級(jí)特大地震影響掷贾,放射性物質(zhì)發(fā)生泄漏睛榄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一想帅、第九天 我趴在偏房一處隱蔽的房頂上張望场靴。 院中可真熱鬧,春花似錦港准、人聲如沸旨剥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轨帜。三九已至,卻和暖如春衩椒,著一層夾襖步出監(jiān)牢的瞬間阵谚,已是汗流浹背蚕礼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工烟具, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梢什,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓朝聋,卻偏偏與公主長(zhǎng)得像嗡午,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冀痕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容