Gost -- 一个极简且有用的GOPATH管理工具

Gost


项目地址:https://github.com/byte16/gost

gost 是一个用于Go语言的简单工具。它可以以一种简洁轻便的方式来帮助你管理GOPATH并运行Go命令。如果你同时开发多个Go项目,并且因为某些原因这些项目基于相互隔离的不同工作空间(例如这些项目基于某些相同依赖的不同版本),这导致你在运行Go命令的时候需要在不同的GOPATH间来回切换,那么gost对于你来说将非常有用。它可以用于持续交付和持续集成的工具链中,也可以作为Gogland这样可以在项目层级来管理GOPATH的集成开发工具在命令行方面的补偿(Gogland无法为命令行终端切换GOPATH)。

gost 是对Go命令的一个封装。它可以帮你实时设置GOPATH并运行Go命令。 gost 维护了一个路径的仓库,这个仓库是基于一个位于当前用户Home目录下的名为.gost.toml的toml文件建立的。 我们可以把这个路径仓库叫做pathspace ,可以使用像gost addgost lsgost rm这些被精心设计的命令来对它进行管理。你也可以在每次运行gost命令的时候通过--config来指定使用一个位于其它位置的.gost.toml文件,但是并不推荐这么做,因为这样可能会导致混乱。

安装


通过下面的命令来下载并安装gost


$ go get github.com/byte16/gost

这将在你的$GOPATH/bin目录下生成一个gost可执行文件。你可以将它转移到一个位于$PATH中的永久目录,这样不论$GOPATH被修改成什么,你都可以正常使用gost

你也可以在本项目的分发页面中直接下载gost的可执行文件:

https://github.com/byte16/gost/releases

使用入门


管理 pathspace

任何你想要用作GOPATH的路径都需要首先被放入pathspace。你可以像这样来添加一个路径:


$ gost add foo /home/foobar/bar

当你通过gost add向pathspace中添加路径的时候,gost会要求你为所添加的路径取一个名称。 在上面的示例中,foo就是为路径/home/foobar/bar所取的名称。在使用gost来运行一个go命令的时候,你可以通过所取的名称来指定使用哪个路径作为GOPATH。每个名称在pathspace中都应该是唯一的。如果一个名称已经在pathspace中用于命名一个路径,当在运行gost add命令时你将这个名称再用于命名新的路径的时候,那么pathspace中的原有路径条目信息将会被覆盖。

注意: 在你把一个路径添加到pathspace之前,你需要首先确认这个路径所代表的目录确实存在。gost对包含软链接的路径支持良好。

gost 支持像/home/foo/bar这样的单路径和像/home/foobar/baz:/home/foobar/quz(这是Linux下的一个示例)这样的路径列表。在不同的操作系统中,路径列表分隔符是不同的。请确保你使用了正确的路径列表分隔符。当你需要把一个包含路径列表的路径条目添加到pathspace中的时候,需要使用--multi(或简写作-m)来显式告知gost。下面是一个示例:


$ gost add foobar /home/foobar/foo:/home/foobar/bar -m

你可以使用 gost ls来查看pathspace中的路径条目的详细信息。如果你确定某些路径条目已经无用,你可以使用gost rm来将它们从pathspace中移除。下面是操作示例:


$ gost ls

* Name:    foo

Path:    /home/foobar/bar

RealPath: /home/foobar/bar # 如果Path包含软链接,RealPath将会是对应的实际路径

Multi:    false

* Name:    foobar

Path:    /home/foobar/foo:/home/foobar/bar

RealPath: /home/foobar/foo:/home/foobar/bar # RealPath是gost自动解析出来的

Multi:    true

$ gost ls foo                   # gost ls 也支持一个或多个名称作为参数

* Name:    foo

Path:    /home/foobar/bar

RealPath: /home/foobar/bar

Multi:    false

$ gost rm foobar                # gost rm 也支持一个或多个名称作为参数

$ gost ls

* Name:    foo

Path:    /home/foobar/bar

RealPath: /home/foobar/bar

Multi:    false

运行Go命令

使用gost设置GOPATH并运行一条Go命令操作非常简单。只需要记住你用来设置GOPATH的路径已经被添加到了pathspace。比如上面的示例,你已经把/home/foobar/bar添加到了pathspace中并命名为foo,现在你想要把/home/foobar/bar设置为GOPATH并运行下面的Go命令:


$ go get -u github.com/byte16/gost

通常在以前没有使用gost的时候,你首先需要通过执行export GOPATH=/home/foobar/bar命令或者将该命令添加到$HOME/.bash_profile并执行source $HOME/.bash_profile来设置GOPATH。现在使用gost你无须像上面那样操作。 你只需要运行下面的命令即可::


$ gost get -p foo -- -u github.com/byte16/gost

切换GOPATH和运行go get命令的任务完全由gost来进行执行。除了使用gost所带来的简便,你体会不到这两种方式之间在功能上会有什么差异。然而,你还可以使操作更加简单。如果/home/foo/bar已经作为一条单目录条目被添加到pathspace中了,并且你当前的工作目录位于/home/foo/bar/src路径下的任意层级的子目录,你可以运行gost get而无需通过--path-p来指定foo,操作如下:


$ gost get -- -u github.com/byte16/gost

gost 会自动探测使用pathspace中的哪个路径来作为GOPATH。

但是,如果你想要将一条包含路径列表的路径条目(如/home/foobar/foo:/home/foobar/bar)来设置为GOPATH并运行Go命令的话,--path(或简写作-p)标志不能被省略。

顺便提示,双横线标记--是用来告诉gost --标记后的标志和参数需要被直接传递给底层的Go命令。所以请不要省略该标记。

现在gost 支持Go的所有功能性命令,对应的gost命令与底层的Go命令有相同的名称。这些命令如下所示:

build      构建包和依赖

clean      移除对象文件

doc        显示包或者标识符的文档

env        打印Go环境信息

bug        开始报告bug

fix        对包运行go工具fix

fmt        对包的源文件运行gofmt

generate    通过处理源代码来生成Go文件

get        下载并安装包和依赖

install    编译并安装包和依赖

list        列出包列表

run        编译并运行go程序

test        对包进行测试

tool        运行指定的go工具

vet        对包运行go工具vet

关于如何通过gost来运行这些命令的详细细节, 可以运行gost help 命令名称来查看。 例如:


$ 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.

贡献代码


如果您能向该项目贡献代码,维护者将不胜感激。当您发现问题或者想要贡献代码,可以生成一个 issue 或一个pull request.

协议


Gost基于MIT 协议进行分发。 详见协议

声明


本文为项目作者原创,您可以自由转发,但请标注来源,非常感谢!

项目地址:https://github.com/byte16/gost

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容