警告:这个答案在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是很有用的。
8条答案
按热度按时间hjzp0vay1#
更新:如果你使用的是Go 1.16,这个答案仍然有效,但是
go install
已经改变了,现在是安装可执行程序包的推荐方法。https://stackoverflow.com/a/68559728/10490740使用Go〉= 1.11,如果你的当前目录在一个基于模块的项目中,或者你已经在你的环境中设置了
GO111MODULE=on
,go get
将不会“全局”安装包,而是将它们添加到你的项目的go.mod文件中。从Go语言1.11.1开始,设置
GO111MODULE=off
可以避免这种行为:基本上,通过禁用此单个命令的模块功能,它将按预期安装到GOPATH。
不使用模块的项目仍然可以正常地将
go get
二进制文件安装到$GOPATH/bin
。有一个很长的对话和多个问题记录了关于这个行为变化分支从这里:是的。
z8dt9xmd2#
从Go〉=1.16开始,安装可执行文件的推荐方法是使用
例如,
go install github.com/fatih/gomodifytags@latest
。可执行文件(主包)安装到由
GOBIN
环境变量命名的目录中,如果没有设置GOPATH
环境变量,则默认为$GOPATH/bin
或$HOME/go/bin
。您需要将此目录添加到您的PATH
变量中以全局运行可执行文件。在我的示例中,我已将此行添加到我的~/.zshrc
文件中。(如果使用bash,请将其添加到~/.bash_profile
文件中):围棋团队发表了一篇关于这一变化的博文,下面是解释性的引述:
我们曾经推荐go get -u程序来安装一个可执行文件,但是这种用法与go get在go. mod中添加或更改模块版本要求的含义产生了太多的混淆。
有关详细信息,请参阅
go install
文档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):或者,您也可以将可执行文件复制或链接到
/usr/local/bin
:dly7yett4#
适用于Linux用户的简短解决方案:
1.照常使用
go get
命令1.将以下行添加到
.bashrc
:1.重新启动终端或获取它。安装的二进制文件将全局可用。
适用于Go v1.8+
go install package_name@latest
b4lqfgs45#
警告:这个答案在the 2020 deprecation of
go get
之后已经过时了,这里给出的解决方案不能在更新的Go运行时中使用。在Go语言中最类似的例子是
go get
,默认情况下,它会从提供的仓库URL中获取一个Go语言包,并且需要在shell中设置一个$GOPATH
变量,这样Go语言就知道该在哪里存储包(以及在编译依赖于go get
-ted包的代码时在哪里找到它们)。范例语法:
npm
的-g
标志提供的行为是默认的,使用go get
安装的软件包通常是全局可用的。有关该命令的更多信息,请参见
go get --help
。正如@helmbert所提到的,如果你要安装独立的软件包,将你的
$GOPATH
添加到你的$PATH
是很有用的。lpwwtiir6#
看到这个问题时,我想 “如果我可以设置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
,这就是我使用的。二进制文件将放在
/usr/bin
中,源代码将放在/usr/src
中。以非根用户身份运行go将以“正常”方式使用GOPATH。
w8biq8rn7#
如果你还没有安装go,你可以使用gobinaries。它会从github repo构建一个按需的二进制项目。
安装go软件包的命令如下:
mwngjboj8#
如果使用的是zsh:
首先:使用以下方法安装软件包:
然后,编辑.zshrc文件
将此行添加到.zshrc文件的末尾:
最后但并非最不重要:
然后打开一个新终端并执行您命令:)