Golang相当于npm install -g

时间:2016-04-15 14:35:19

标签: go npm bin npm-install goinstall

如果我有一个我想要安装的已编译的Golang程序,我可以从计算机上的任何位置使用bash命令运行它,我该怎么做?例如,在nodejs

npm install -g express

安装express表示我可以运行命令

express myapp

和express将为我当前目录中的一个名为“myapp”的节点应用程序生成一个文件目录。 go有同等的命令吗?我相信现在使用“go install”命令你必须在包含可执行文件的目录中才能运行它

提前致谢!

7 个答案:

答案 0 :(得分:9)

据我所知,没有直接等同于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,具体取决于您使用的是哪个shell):

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

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

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

答案 1 :(得分:5)

使用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

答案 2 :(得分:2)

Go中最接近的类似物是go get。默认情况下,它将从提供的存储库URL获取Go包,并且需要在shell中设置$GOPATH变量,以便Go知道存储包的位置(以及随后在编译代码时在哪里找到它们)在go get - ted包上。)

语法示例:

$ go get github.com/user/repo

npm的{​​{1}}标志提供的行为是默认行为,使用-g安装的软件包通常可在全球范围内使用。

有关该命令的详细信息,请参阅go get

如@helmbert所述,如果您要安装独立软件包,将go get --help添加到$GOPATH非常有用。

答案 3 :(得分:2)

Linux 用户的简短解决方案:

  1. 照常使用 go get 命令
  2. 将以下行添加到 .bashrc
# This is the default GOPATH, you should confirm with the 'go env' command
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
  1. 重启终端或获取它。已安装的二进制文件将在全球范围内可用。

答案 4 :(得分:0)

TL; DR 在底部。我将向您介绍如何得出这个结论,以及为什么更明显的解决方案不起作用。


看到这个问题,我想“如果我可以设置root的GOPATH=/usr,它将在/usr/bin//usr/src中安装东西!”

所以我尝试了明显的事情:

  1. GOPATH=/usr添加到根目录的.bashrc
    奏效了!
    有点
    不是真的
    原来,sudo没有执行根目录的.bashrc。出于“安全性”之类的要求。

  2. 执行env_set/etc/sudoers中的某事
    事实证明,/etc/sudoers只能删除环境变量。没有env_set指令。
    (据我所知)

  3. 浏览man sudoers
    sudo从哪里获取默认的环境变量集?
    好吧,列表中的第一个是/etc/environment,这就是我使用的那个。


sudo echo "GOPATH=/usr" >> /etc/environment
sudo go get <repo>

二进制文件将放在/usr/bin中,源文件将放在/usr/src中。

以非超级用户身份运行go将以“正常”方式使用GOPATH。

答案 5 :(得分:0)

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

go install package@version

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

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

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

Go 团队发布了关于此更改的 blog post,以下是解释引用:

<块引用>

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

详情请参阅go install documentation

答案 6 :(得分:0)

如果您还没有安装 go,您可以使用 gobinaries。它从 github 存储库构建项目的按需二进制文件。

安装go包的命令是:

curl -sf https://gobinaries.com/rakyll/hey | sh
相关问题