golang:go install尝试/ usr / local而不是GOPATH

时间:2012-09-20 18:09:24

标签: install go local

这有点是我上一期提问的后续问题:golang: installing packages in a local directory

我将GOPATH设置为$HOME/prog/go/gopath,此路径存在三个目录:

~/prog/go/gopath$ ls
bin  pkg  src

现在我尝试安装module to access the redis database,要求我运行

go install

在源目录中。但命令go install给了我

~/prog/go/gopath/src/redis (go1)$ go install
go install flag: open /usr/local/go/pkg/darwin_amd64/flag.a: permission denied
~/prog/go/gopath/src/redis (go1)$ echo $GOPATH 
<myhomedir>/prog/go/gopath

(其中<myhomedir>是有效路径)

问题1:go install为什么不考虑$GOPATH? 问题2:如何说服go install使用$GOPATH

4 个答案:

答案 0 :(得分:6)

不确定如何设置go但是它可能需要从std库构建软件包,但由于权限而无法构建软件包。你可以尝试

cd /usr/local/go/src
sudo ./all.bash

这应该构建std库并运行测试以确保一切正常。

确保您具有必要的权限,以便从$ GOROOT读取和执行。我个人只是从golang.org下载档案并将其保存在〜/ local / go下并正确设置GOROOT。

答案 1 :(得分:5)

这里有类似的问题。当我检查我的$ GOROOT时,我发现所有的库都已经在那里构建了。但由于某些原因,它试图重建所有库。所以我只是做了一个小技巧:

find /usr/lib/go/pkg/ -name "*.*" | sudo xargs touch

然后一切正常。

答案 2 :(得分:3)

我认为你需要的命令是“go get”:

go get github.com/alphazero/Go-Redis

将下载Go-Redis库并将其放入$ GOPATH / src目录。

go install在您自己的源代码上执行编译和安装。

我必须承认,我对这一整个概念进行了一些努力,但仔细阅读“How to Write Go”和代码组织部分包含了有关go命令如何工作的信息。< / p>

答案 3 :(得分:0)

解决方法是从.bash_profile中删除GOROOT。然后go命令将它安装到您的GOPATH目录。 奇怪的是:当我再次在我的.bash_profile中设置GOROOT并创建一个新的shell时,它也可以工作。