osx - `go get`失败,某些go包被拒绝

时间:2014-11-06 06:39:37

标签: macos go sudo

安装一些go包失败,出现permission denied错误,例如:

$ go get code.google.com/p/go.tools/cmd/cover
go install code.google.com/p/go.tools/cmd/cover: open /usr/local/go/pkg/tool/darwin_amd64/cover: permission denied

当我尝试使用sudo修复权限问题时,错误导致$GOPATH not set错误:

$ sudo go get code.google.com/p/go.tools/cmd/cover
Password:
package code.google.com/p/go.tools/cmd/cover: cannot download, $GOPATH not set. For more details see: go help gopath

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:13)

  1. godocgo tool vetgo tool cover等是特殊的go.tools命令,默认情况下会安装到系统路径中并使用go二进制文件。如果这些命令不可用,您应该尝试重新安装go(或在包装系统中找到go.tools)。

    注意:在OS X 10.8+上,尝试使用Homebrew而不是官方.pkg安装程序安装go,你的麻烦应该消失了(截至1.4):brew install go

    < / LI>
  2. 如果您要将特定的pkg下载到$GOPATH(例如第三方依赖关系),请改用go get -d <pkg>。例如:

    go get -d code.google.com/p/go.tools/cmd/cover
    
  3. 根本不需要使用sudo锤子,因为$GOPATH应该指向您拥有的目录,因此没有{完全错误{1}}。

    但是如果你真的知道自己在做什么,并且仍然希望permission: denied安装一些东西,你需要先编辑sudoers文件来修复root的GOPATH:

    sudo

    添加以下行:

    $ sudo visudo
    

    这将使Defaults env_keep += "GOPATH" (根上下文)获取您的sudo go get值。

答案 1 :(得分:2)

我刚刚碰到这个因为我安装了MacPorts。 Vojtech Vitek的回答指出了我正确的方向,但我想我会继续发布我需要的文字解决方案。

运行sudo port install go-tools。我不知道为什么godoc等人不包括在基础包中,但无论如何。