【问题标题】:`go get` fails with permission denied on certain go packages`go get` 失败,某些 go 包的权限被拒绝
【发布时间】:2015-01-02 14:08:38
【问题描述】:

安装一些 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

我该如何解决这个问题?

【问题讨论】:

标签: macos go sudo


【解决方案1】:
  1. godocgo tool vetgo tool cover 等是特殊的go.tools 命令,默认使用 go 二进制文件安装到系统路径中。如果这些命令不可用,您应该尝试重新安装 go 本身(或在您的打包系统中找到 go.tools)。

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

  2. 如果您想将特定的 pkg 下载到您的 $GOPATH(例如,第 3 方依赖项),请改用 go get -d <pkg>。示例:

    go get -d code.google.com/p/go.tools/cmd/cover
    
  3. 不应该根本不需要使用sudo 锤子,因为您的$GOPATH 应该指向您拥有的目录,因此根本不会出现permission: denied 错误。

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

    $ sudo visudo
    

    添加以下行:

    Defaults    env_keep += "GOPATH"
    

    这将使sudo go get(根上下文)获取您的$GOPATH 值。

【讨论】:

  • 在搜索了 10 个相似的问题和众多答案之后,这是唯一一个完全涵盖所有内容的答案!谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多