当我运行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)
答案 0 :(得分:12)
godoc
似乎是常规go get
惯例的例外,因为它会安装到go安装($GOROOT/bin
)而不是$GOPATH
。那么,如果你真的需要更新godoc
(为什么?),你需要做的是:
su
,或sudo su
,或...)$GOPATH
设为普通用户$GOPATH
("/home/utkbansal/go"
)godoc
或所有工具go get -u golang.org/x/tools/cmd/godoc
$GOPATH
设置相应的权限,即chown -R utkbansal:utkbansal $GOPATH
(仍为root用户)我认为应该可行。但是:您为什么要更新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
效果很好。
答案 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
中。