为什么Golang说我的GOPATH不是';当我在前面直接设置命令时,是否不设置?

为什么Golang说我的GOPATH不是';当我在前面直接设置命令时,是否不设置?,go,Go,这变得非常令人沮丧。我在我的~/.bash_配置文件中设置了我的GOPATH,但Go仍然说它没有设置。所以我手动设置,它仍然显示 computer:~ doug$ export GOPATH=~/Dropbox/golang computer:~ doug$ sudo go get -u golang.org/x/tools/cmd/... package golang.org/x/tools/cmd/...: cannot download, $GOPATH not set. For more

这变得非常令人沮丧。我在我的
~/.bash_配置文件中设置了我的GOPATH,但Go仍然说它没有设置。所以我手动设置,它仍然显示

computer:~ doug$ export GOPATH=~/Dropbox/golang
computer:~ doug$ sudo go get -u golang.org/x/tools/cmd/...
package golang.org/x/tools/cmd/...: cannot download, $GOPATH not set. For more details see: go help gopath

我做错了什么?如果我键入
goenv
,它甚至会将其列为设置为正确路径。

sudo
默认情况下删除环境变量,因此以
root运行的命令无法看到设置为
doug
的环境变量。一般来说,您不需要
sudo
来运行
go-get
,尽管一些
golang.org/x/tools
软件包有些特殊。尝试只安装所需的环境变量(不带sudo),而不是使用
..

sudo
默认情况下删除环境变量,因此以
root
运行的命令无法看到设置为
doug
的环境变量。一般来说,您不需要
sudo
来运行
go-get
,尽管一些
golang.org/x/tools
软件包有些特殊。尝试只安装您需要的(不带sudo)而不是使用
..

我特别喜欢go,它的整个环境特别容易设置,只需使用
wget
tar
而不需要任何特殊权限

这是我通常在任何系统上安装(和更新)的方式:

$ wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
$ tar -xzvf go1.6.2.linux-amd64.tar.gz
$ export GOROOT=$PWD/go
$ export PATH=$PWD/go/bin:$PATH
$ which go
/tmp/example/go/bin/go
$ go version
go version go1.6.2 linux/amd64
您可以在此处找到指向tar存档的链接:

我喜欢下载并提取我用于
$HOME/Programs
的每个版本,然后设置一个符号链接,指向我真正想要使用的版本:

ls -la /home/fgrosse/Programs | grep go
lrwxrwxrwx   1 fgrosse fgrosse    6 Mar  9 20:52 go -> go1.6.1
drwxr-xr-x  11 fgrosse fgrosse 4.0K Feb 17 21:47 go1.5.4
drwxr-xr-x  11 fgrosse fgrosse 4.0K Feb 17 21:47 go1.6
drwxrwxr-x  11 fgrosse fgrosse 4.0K Apr 23 19:58 go1.6.1
drwxrwxr-x  11 fgrosse fgrosse 4.0K Apr 23 19:58 go1.6.2
$ echo $GOROOT
/home/fgrosse/Programs/go

我特别喜欢go,它的整个环境特别容易设置,只需使用
wget
tar
即可,无需任何特殊权限

这是我通常在任何系统上安装(和更新)的方式:

$ wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
$ tar -xzvf go1.6.2.linux-amd64.tar.gz
$ export GOROOT=$PWD/go
$ export PATH=$PWD/go/bin:$PATH
$ which go
/tmp/example/go/bin/go
$ go version
go version go1.6.2 linux/amd64
您可以在此处找到指向tar存档的链接:

我喜欢下载并提取我用于
$HOME/Programs
的每个版本,然后设置一个符号链接,指向我真正想要使用的版本:

ls -la /home/fgrosse/Programs | grep go
lrwxrwxrwx   1 fgrosse fgrosse    6 Mar  9 20:52 go -> go1.6.1
drwxr-xr-x  11 fgrosse fgrosse 4.0K Feb 17 21:47 go1.5.4
drwxr-xr-x  11 fgrosse fgrosse 4.0K Feb 17 21:47 go1.6
drwxrwxr-x  11 fgrosse fgrosse 4.0K Apr 23 19:58 go1.6.1
drwxrwxr-x  11 fgrosse fgrosse 4.0K Apr 23 19:58 go1.6.2
$ echo $GOROOT
/home/fgrosse/Programs/go

sudo
更改您的环境,这意味着不再导出
GOPATH
。在不使用
sudo
的情况下再次运行该命令(这是标准做法)。@TimCooper但是我收到了一堆“权限被拒绝”错误如果必须使用
sudo
,请尝试:
sudo env GOPATH=~/Dropbox/golang go get-u golang.org/x/tools/cmd/…
-将
env
命令添加到环境中(像这样调用时)然后运行您最初想要的
go
命令,但这一切都发生在
sudo
修补环境之后。显然,这假设
sudo
允许您运行
env
sudo
更改您的环境,这意味着不再导出
GOPATH
。在不使用
sudo
的情况下再次运行该命令(这是标准做法)。@TimCooper但是我收到了一堆“权限被拒绝”错误如果必须使用
sudo
,请尝试:
sudo env GOPATH=~/Dropbox/golang go get-u golang.org/x/tools/cmd/…
-将
env
命令添加到环境中(像这样调用时)然后运行您最初想要的
go
命令,但这一切都发生在
sudo
修补环境之后。显然,这假设
sudo
允许您运行
env
。如果我不以sudo的身份运行它,就会出现一系列被拒绝的权限错误。我下面说的是在“安装软件包”下执行该命令。是的,
tools/…
下的一些软件包需要特殊权限,但如果安装正确,您应该已经拥有了这些权限。您需要确定哪些工具是您需要但没有的,并且只安装这些工具。(该教程建议安装
,因为作者可能是以不需要root权限的方式安装go的,可能是通过自制的)。如果我不以sudo的方式运行go,我会遇到一系列权限被拒绝的错误。我下面说的是在“安装软件包”下执行该命令。是的,
tools/…
下的一些软件包需要特殊权限,但如果安装正确,您应该已经拥有了这些权限。您需要确定哪些工具是您需要但没有的,并且只安装这些工具。(该教程建议安装
,因为作者可能以不需要root权限的方式安装go,可能是通过自制)。