为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 相当于 npm install -g

Golang 相当于 npm install -g

Go
GCT1015 2022-01-04 15:41:37
如果我想安装一个已编译的 Golang 程序,以便我可以在计算机上的任何位置使用 bash 命令运行它,我该怎么做?例如,在 nodejs 中npm install -g express安装 express 以便我可以运行命令express myapp并且 express 将为我当前目录中的名为“myapp”的节点应用程序生成一个文件目录。是否有等效的 go 命令?我相信现在使用“go install”命令你必须在包含可执行文件的目录中才能运行它提前致谢!
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

更新:如果你使用的是 Go 1.16,这个答案仍然有效,但go install已经改变,现在是安装可执行包的推荐方法。有关解释,请参阅 Karim 的回答:https : //stackoverflow.com/a/68559728/10490740

使用 Go >= 1.11,如果您的当前目录位于基于模块的项目中,或者您已GO111MODULE=on在您的环境中设置,go get则不会“全局”安装软件包。它会将它们添加到您项目的 go.mod 文件中。

从 Go 1.11.1 开始,设置GO111MODULE=off可以避免这种行为:

GO111MODULE=off go get github.com/usr/repo

基本上,通过禁用此单个命令的模块功能,它将按预期安装到 GOPATH。

不使用模块的项目仍然可以go get正常安装二进制文件到$GOPATH/bin.

有一个冗长的对话和多个问题记录了关于这种行为变化的分支从这里:golang/go - cmd/go: go get should not add a dependency to go.mod #27643


查看完整回答
反对 回复 2022-01-04
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

据我所知,没有直接等价于npm install -g. 最接近的等价物不是go install,而是go get。从帮助页面 ( go help get):

用法: go get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]

获取下载并安装由导入路径命名的包及其依赖项。

默认情况下,go get将二进制文件安装到$GOPATH/bin,因此使这些二进制文件可从任何地方调用的最简单方法是将该目录添加到$PATH.

为此,将以下行放入您的.bashrc(或.zshrc,取决于您使用的外壳):

export PATH="$PATH:$GOPATH/bin"

或者,您也可以将可执行文件复制或链接到/usr/local/bin

ln -s $GOPATH/bin/some-binary /usr/local/bin/some-binary


查看完整回答
反对 回复 2022-01-04
?
倚天杖

TA贡献1828条经验 获得超3个赞

从 Go >= 1.16开始,推荐的安装可执行文件的方法是使用

go install package@version

例如,go install github.com/fatih/gomodifytags@latest

可执行文件(主包)安装到由GOBIN环境变量命名的目录中,该目录默认为$GOPATH/bin$HOME/go/bin如果GOPATH未设置环境变量。您需要将此目录添加到您的PATH变量中以全局运行可执行文件。就我而言,我已将此行添加到我的~/.zshrc文件中。(如果您使用的是 bash,请将其添加到~/.bash_profile文件中):

export PATH="$HOME/go/bin:$PATH"

Go 团队发布了一篇关于此更改的博客文章,以下是解释引用:

我们曾经推荐使用 go get -u program 来安装一个可执行文件,但是这种用法与 go get 在 go.mod 中添加或更改模块版本要求的含义造成了太多混淆。

有关更多详细信息,请参阅go install文档


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信