15

这在某种程度上是对我最后一个问题的跟进:golang:在本地目录中安装软件包

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

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

现在我尝试安装一个模块来访问要求我运行的 redis 数据库

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

4 回答 4

6

不确定您的设置方式,但它可能需要从 std 库构建包,但由于权限而不能。你可以试试

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

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

确保您有适当的权限在必要时从 $GOROOT 读取和执行。就我个人而言,我只是从 golang.org 下载存档并将其保存在 ~/local/go 下并适当地设置 GOROOT。

于 2012-09-20T18:38:33.323 回答
5

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

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

然后一切正常。

于 2014-08-21T08:12:24.660 回答
3

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

go get github.com/alphazero/Go-Redis

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

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

我必须承认,我在整个概念上挣扎了一会儿,但是仔细重新阅读“如何编写 Go ”和代码组织部分包含您需要了解的有关 go 命令如何工作的内容。

于 2012-09-27T02:38:37.070 回答
0

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

于 2013-10-09T08:26:03.413 回答