无法安装Go包

时间:2015-11-17 08:29:11

标签: go

当我运行1时,我得到一个权限拒绝错误,当我尝试go get时,我收到GOPATH未设置错误。

sudo go get

以下是$ PATH,go env和go命令的结果。

utkbansal@Dell:~$ go  get -u golang.org/x/tools/cmd/...
go install golang.org/x/tools/cmd/godoc: open /usr/lib/go/bin/godoc: permission denied

utkbansal@Dell:~$ sudo go  get -u golang.org/x/tools/cmd/...
package golang.org/x/tools/cmd/...: cannot download, $GOPATH not set. For more details see: go help gopath

我该如何解决这个问题?

我在这个PPA中使用go1.5 https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/lxd-stable(ppa:ubuntu-lxc / lxd-stable)

8 个答案:

答案 0 :(得分:12)

godoc似乎是常规go get惯例的例外,因为它会安装到go安装($GOROOT/bin)而不是$GOPATH。那么,如果你真的需要更新godoc(为什么?),你需要做的是:

  1. 以root身份登录(或su,或sudo su,或...)
  2. $GOPATH设为普通用户$GOPATH"/home/utkbansal/go"
  3. 使用godoc或所有工具
  4. 更新go get -u golang.org/x/tools/cmd/godoc
  5. $GOPATH 设置相应的权限,即chown -R utkbansal:utkbansal $GOPATH(仍为root用户)
  6. 我认为应该可行。但是:您为什么要更新godoc?如果您只想要一个未预先安装的特定工具,那么您应该能够go get没有root权限。

答案 1 :(得分:7)

mrd0ll4r对此问题有一个很好的解释,但我想分享一种更简单的方法来安装godoc。假设您在$GOPATH(或类似)中设置了.bashrc,请尝试:

sudo -E go get golang.org/x/tools/cmd/godoc

使用-E标记可以保留当前的环境变量(包括$GOPATH)。

答案 2 :(得分:2)

请参阅@ mrd0ll4r答案哪个更好。 (https://stackoverflow.com/a/33755566/989659

<强>更新

因为您使用了-u标志,所以它首先尝试更新已经安装的包并在/ usr / lib / go / bin / godoc中有二进制文件

当你用sudo运行它时它没有你的环境变量所以它不再有GOPATH变量

您可以进入root模式并从那里运行

{{1}}

答案 3 :(得分:1)

如果您没有root权限,我们可以将二进制文件构建为$GOPATH/bin,让我使用godoc作为示例

go get -u golang.org/x/tools/cmd/godoc
cd $GOPATH/src/golang.org/x/tools/cmd/godoc
go build -o $GOPATH/bin/godoc

答案 4 :(得分:1)

我的电脑中出现同样的问题。问题是,我安装了,但不是godoc。简单的是安装标准的godoc(在我的fedora dnf安装上)

bitbake

感谢mrd0ll4r解释出错了什么

答案 5 :(得分:0)

我尝试了这个帖子中的所有答案,并且无法安装godoc。

sudo apt install golang-golang-x-tools

我相信我现在有一个比我的Go版本更旧的godocs版本,但我会接受它。

答案 6 :(得分:0)

在安装delve时我遇到了同样的问题

go get github.com/derekparker/delve/cmd/dlv: open /usr/local/go/bin/dlv: permission denied

但是我通过使用另一种形式@ mrd0ll4r解决了它,您不需要更改任何内容。

sudo env "PATH=$PATH" go get -u github.com/derekparker/delve/cmd/dlv

效果很好。

参阅command not found when using sudo

答案 7 :(得分:-1)

`sudo GOPATH = path_to_go_installation go get -u golang.org/x/tools/cmd /...

sudo - 以root身份运行以下命令。

GOPATH=path_to_go_installation - 为sudo会话设置环境变量。

go get - 将软件包安装到上一步设置的GOPATH中。