我对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