Golang相当于npm install -g

Rya*_*yan 16 go bin goinstall npm npm-install

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

npm install -g express
Run Code Online (Sandbox Code Playgroud)

安装表达,以便我可以运行命令

express myapp
Run Code Online (Sandbox Code Playgroud)

和express将生成一个名为"myapp"的节点应用程序的文件目录,无论我当前的目录是什么.go有同等的命令吗?我相信现在使用"go install"命令,您必须位于包含可执行文件的目录中才能运行它

提前致谢!

Kar*_*rim 36

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

go install package@version
Run Code Online (Sandbox Code Playgroud)

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

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

export PATH="$HOME/go/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅go install文档了解更多详细信息


Moh*_*ail 11

针对 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
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动终端或获取它。安装的二进制文件将在全球范围内可用。

对于 Go v1.8+

  1. go install package_name@latest


hel*_*ert 10

据我所知,没有直接相当于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"
Run Code Online (Sandbox Code Playgroud)

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

ln -s $GOPATH/bin/some-binary /usr/local/bin/some-binary
Run Code Online (Sandbox Code Playgroud)

  • 当时这是正确的(并感谢您的帮助)但对于遇到此问题的任何人来说值得注意的是,现在有一个 `go install` 可以构建一个二进制文件并将其放入你的 `$GOPATH/bin` (2认同)

小智 9

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

从Go 1.11.1开始,设置GO111MODULE=off可以规避此行为:

GO111MODULE=off go get github.com/usr/repo
Run Code Online (Sandbox Code Playgroud)

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

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

从这里开始,有一段漫长的对话,并且记录了有关行为变化的多个问题:golang / go-cmd / go:go get不应为go.mod#27643添加依赖项


Jul*_*les 5

警告:随着2020 年弃用go get. 此处介绍的解决方案不适用于较新的 Go 运行时安装。

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

语法示例:

$ go get github.com/user/repo
Run Code Online (Sandbox Code Playgroud)

npm的标志提供的行为-g是默认的,使用安装的包go get通常是全局可用的。

go get --help有关该命令的更多信息,请参阅参考资料。

正如@helmbert 所提到的,如果您要安装独立的软件包,将您的添加$GOPATH到您的中$PATH非常有用。