如何在全局安装golang工具,然后在不同GOPATH的多个项目中使用它们?

时间:2017-07-01 16:44:23

标签: go

大多数golang工具(如golint,gopkgs等)都安装得像go get的库,例如go get -v github.com/golang/lint/golintgo get -v github.com/tpng/gopkgs。我想知道为什么这些不仅仅是通过源代码的二进制文件,例如go fmt

由于我同时处理多个Go项目,我更喜欢为不同的项目使用不同的GOPATH,因此我必须将这些工具安装到每个项目中,以便我可以进行lint或自动完成。

我做错了什么或有没有办法全局安装这些工具然后只在多个项目中使用它们?处理多个项目的人如何管理这个?

修改

我不会询问有关图书馆的出售或同时使用不同版本的Go的项目。我的问题是必须在每个GOPATH中安装像lint和gopkgs这样的工具,为什么它们被设计成像库那样被处理,而不是像go fmt这样的全局二进制文件提供,然后可以在多个项目中使用,就像我们使用go fmt

一样

1 个答案:

答案 0 :(得分:2)

  

所以我不得不将这些工具安装到每个项目中,以便我可以完成或自动完成。

不,你不这样做:看看Visual Studio Code如何通过它的Microsoft vscode-go插件(从它的0.6.53版本,2017年1月)开始。

  

新设置go.toolsGopath,用于提供备用位置来安装扩展程序所依赖的所有Go工具,如果您不希望它们使GOPATH混乱。
  请参阅PR 351PR 737

安装在那个通用``文件夹中的工具是:

'gocode': 'github.com/nsf/gocode',
'gopkgs': 'github.com/tpng/gopkgs',
'go-outline': 'github.com/ramya-rao-a/go-outline',
'go-symbols': 'github.com/acroca/go-symbols',
'guru': 'golang.org/x/tools/cmd/guru',
'gorename': 'golang.org/x/tools/cmd/gorename',
'gomodifytags': 'github.com/fatih/gomodifytags',
'impl': 'github.com/josharian/impl'

(以及其他一些人,godocgoimportsgoreturnsdlv,......),

这意味着您的GOPATH由以下内容组成:

  • 您的项目特定工作区文件夹
  • 专用于所有项目使用的工具的全局go.toolsGopath工作区文件夹 这些工具在后一工作区的bin/子文件夹中安装/更新。

您也可以手动执行此操作(不使用Visual Studio代码):只要您想安装/更新工具,只需将GOPATH设置为该全局工具文件夹即可。

然后将GOPATH重置为my/project/dedicated/workspace;/tools/workspace,并将bin/个子文件夹添加到$PATH / %PATH%

OP Nithin添加in the comments

  

这些工具可以编译成二进制文件,如果这些二进制文件在$PATH中可用,大多数编辑器,就我测试而言(基于你的帖子),vscode和atom(go-plus)都可以工作,不会再go get他们。

     

如果将它们视为库,则更容易更新。 (我的意思是go get