npm install -g的Golang等效项

yduiuuwa  于 2022-11-24  发布在  Go
关注(0)|答案(8)|浏览(215)

如果我有一个编译过的Golang程序,我想安装它,这样我就可以在我的计算机上的任何地方用bash命令运行它,我该怎么做呢?

npm install -g express

安装express以便可以运行命令

express myapp

和express将在我的当前目录中为一个名为“myapp”的节点应用程序生成一个文件目录。
提前感谢!

hjzp0vay

hjzp0vay1#

更新:如果你使用的是Go 1.16,这个答案仍然有效,但是go install已经改变了,现在是安装可执行程序包的推荐方法。https://stackoverflow.com/a/68559728/10490740
使用Go〉= 1.11,如果你的当前目录在一个基于模块的项目中,或者你已经在你的环境中设置了GO111MODULE=ongo get将不会“全局”安装包,而是将它们添加到你的项目的go.mod文件中。
从Go语言1.11.1开始,设置GO111MODULE=off可以避免这种行为:

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

基本上,通过禁用此单个命令的模块功能,它将按预期安装到GOPATH。
不使用模块的项目仍然可以正常地将go get二进制文件安装到$GOPATH/bin
有一个很长的对话和多个问题记录了关于这个行为变化分支从这里:是的。

z8dt9xmd

z8dt9xmd2#

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

go install package@version

例如,go install github.com/fatih/gomodifytags@latest
可执行文件(主包)安装到由GOBIN环境变量命名的目录中,如果没有设置GOPATH环境变量,则默认为$GOPATH/bin$HOME/go/bin。您需要将此目录添加到您的PATH变量中以全局运行可执行文件。在我的示例中,我已将此行添加到我的~/.zshrc文件中。(如果使用bash,请将其添加到~/.bash_profile文件中):

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

围棋团队发表了一篇关于这一变化的博文,下面是解释性的引述:
我们曾经推荐go get -u程序来安装一个可执行文件,但是这种用法与go get在go. mod中添加或更改模块版本要求的含义产生了太多的混淆。
有关详细信息,请参阅go install文档

yqlxgs2m

yqlxgs2m3#

据我所知,没有直接等价于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
dly7yett

dly7yett4#

适用于Linux用户的简短解决方案:
1.照常使用go get命令
1.将以下行添加到.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.重新启动终端或获取它。安装的二进制文件将全局可用。
适用于Go v1.8+

  1. go install package_name@latest
b4lqfgs4

b4lqfgs45#

警告:这个答案在the 2020 deprecation of go get之后已经过时了,这里给出的解决方案不能在更新的Go运行时中使用。
在Go语言中最类似的例子是go get,默认情况下,它会从提供的仓库URL中获取一个Go语言包,并且需要在shell中设置一个$GOPATH变量,这样Go语言就知道该在哪里存储包(以及在编译依赖于go get-ted包的代码时在哪里找到它们)。
范例语法:

$ go get github.com/user/repo

npm-g标志提供的行为是默认的,使用go get安装的软件包通常是全局可用的。
有关该命令的更多信息,请参见go get --help
正如@helmbert所提到的,如果你要安装独立的软件包,将你的$GOPATH添加到你的$PATH是很有用的。

lpwwtiir

lpwwtiir6#

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

看到这个问题时,我想 “如果我可以设置root的GOPATH=/usr,它将安装/usr/bin//usr/src中的内容!"
所以我试了一个显而易见的办法:
1.GOPATH=/usr添加到根的.bashrc
而且成功了!
算是吧。
不是真的。
事实证明,sudo并不执行root的.bashrc
1.env_set中执行env_set或其他操作
事实证明,/etc/sudoers只能 * 删除 * 环境变量。没有env_set指令。
(As我能找到的)
1.挖穿man sudoers
sudo从哪里获得它的默认环境变量集?
列表中的第一个是/etc/environment,这就是我使用的。

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

二进制文件将放在/usr/bin中,源代码将放在/usr/src中。
以非根用户身份运行go将以“正常”方式使用GOPATH。

w8biq8rn

w8biq8rn7#

如果你还没有安装go,你可以使用gobinaries。它会从github repo构建一个按需的二进制项目。
安装go软件包的命令如下:

curl -sf https://gobinaries.com/rakyll/hey | sh
mwngjboj

mwngjboj8#

如果使用的是zsh:
首先:使用以下方法安装软件包:

go install package@version

然后,编辑.zshrc文件

nano ~/.zshrc

将此行添加到.zshrc文件的末尾:

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

最后但并非最不重要:

source ~/.zshrc

然后打开一个新终端并执行您命令:)

相关问题