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

Voj*_*tek 5 macos sudo go

安装一些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
Run Code Online (Sandbox Code Playgroud)

当我尝试使用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
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Voj*_*tek 13

  1. godoc,go tool vet,go tool cover等特殊go.tools这意味着被安装到系统路径默认与去二进制命令.如果这些命令不可用,您应该尝试重新安装go(或go.tools在您的包装系统中找到).

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

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

    go get -d code.google.com/p/go.tools/cmd/cover
    
    Run Code Online (Sandbox Code Playgroud)
  3. 根本不需要使用sudo锤子,因为您$GOPATH应该指向您拥有的目录,因此根本没有permission: denied错误.

    但如果您真的知道自己在做什么,并且仍想sudo安装某些东西,则需要先编辑sudoers文件以修复root的GOPATH:

    $ sudo visudo
    
    Run Code Online (Sandbox Code Playgroud)

    添加以下行:

    Defaults    env_keep += "GOPATH"
    
    Run Code Online (Sandbox Code Playgroud)

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