go install总是尝试使用GOROOT,而GOPATH没有在go env下列出

  • 本文关键字:go GOPATH env install GOROOT go
  • 更新时间 :
  • 英文 :


我对GOPATH有一个相当令人沮丧的问题,尽管在.profile中设置,但在调用go env时没有出现,并且似乎没有影响go install目标位置。

我试图使用go install来安装软件包,并且得到这个错误,这清楚地表明它试图安装在/usr/lib/go中,而不是/home/me/dev/go的预期目录。

$ go install github.com/songgao/colorgo
go install github.com/songgao/go.pipeline: mkdir /usr/lib/go/pkg/linux_386/github.com: permission denied

go env给出如下结果:

$ go env
GOROOT="/usr/lib/go"
GOBIN=""
GOARCH="386"
GOCHAR="8"
GOOS="linux"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="linux"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread"
CGO_ENABLED="1"

但是肯定是集合。

$ echo $GOPATH
/home/me/dev/go

更新:我已经导出了GOPATH在~/.profile和来源,但我仍然有同样的问题。

$ export GOPATH=/home/me/dev/go
$ go env
GOROOT="/usr/lib/go"
GOBIN=""
GOARCH="386"
GOCHAR="8"
GOOS="linux"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="linux"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread"
CGO_ENABLED="1"

再次更新:这个问题已经停止,因为我升级到go1.1beta2。我不确定是什么错了,因为GOPATH似乎设置正确,但它现在显然都在工作。

GOPATH和工作区

$ mkdir -p $HOME/dev/go/src
$ mkdir -p $HOME/dev/go/bin

In $HOME/.profile:

export GOPATH=$HOME/dev/go:
export PATH=$PATH:$HOME/dev/go/bin

然后重新启动或注销再登录。

一旦你登录了,在做其他事情之前,运行:

$ env | grep -i '^GO'
GOPATH=/home/me/dev/go
$ cat $HOME/.profile

你得到什么输出?

由于您提供了设置GOPATH的证据,所以您问题的第二部分- GOPATH没有列在go env下-可能是由于您安装的版本的"go env"造成的。"go env"的go1 (linux)和go1.0.2 (windows)版本都不显示GOPATH。如果你查看源代码(GOROOT/src/cmd/go/env.go),你会发现在最上面要显示的元素列表(mkEnv)以GOROOT开头,并且包含GOPATH。

版本go1.0.3 (windows)显示GOPATH;然而,源代码中相应的列表以GOARCH开头。

我承认这并不能解决问题的第一部分-(试图)安装到GOROOT -但也许上面的内容将帮助您关注罪魁祸首(构建过程)。

我认为这是很清楚的,去安装所有的GOTOOLDIR, GOTOOLDIR也与GOROOT相关:

你:GOROOT ="/usr/lib/go"

根据文档:

安装Go工具

Go二进制发行版假设它们将安装在/usr/local/go(或Windows下的c:Go)中,但也可以安装在其他位置。如果这样做,在使用Go工具时需要将GOROOT环境变量设置为该目录。

例如,如果你安装了Go到你的主目录,你应该添加以下命令到$ home/.profile:

出口GOROOT = $ HOME/去

出口路径= $路径:$ GOROOT/bin

Windows用户应该阅读关于在Windows下设置环境变量的部分。

您应该按照以下步骤更改您的GOROOT,而不是GOPATH,然后一切都应该正常。

如果不工作,也更改GOTOOLDIR

创建软链接,然后复制/usr/local中的go二进制文件,如下所示:

# ln -sf /usr/local/go/bin/go /usr/bin/go

最新更新