无法安装Go包

utk*_*sal 7 go

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

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
Run Code Online (Sandbox Code Playgroud)

这是$ PATH,go env和go命令的结果.

utkbansal@Dell:~$ which go
/usr/lib/go/bin/go

utkbansal@Dell:~$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/utkbansal/go"
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"


utkbansal@Dell:~$ $PATH
bash: /usr/lib/go/bin:/home/utkbansal/miniconda/bin:/usr/local/heroku/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/go/bin: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

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

mrd*_*l4r 13

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

  1. 以root身份登录(或su,或sudo su,或...)
  2. 设置$GOPATH为普通用户$GOPATH("/home/utkbansal/go")
  3. 更新godoc,使用go get -u golang.org/x/tools/cmd/godoc或所有工具
  4. 为您设置适当的权限$GOPATH,即chown -R utkbansal:utkbansal $GOPATH(仍为root)

那应该可行.但是:你为什么要更新godoc?如果您只想要一个未预先安装的特定工具,则应该能够在go get没有root权限的情况下使用它.


Bar*_*ers 7

mrd0ll4r对这个问题有一个很好的解释,尽管我想分享一个更简单的安装方法godoc.假设你设置$GOPATH了你的.bashrc(或类似的)尝试:

sudo -E go get golang.org/x/tools/cmd/godoc
Run Code Online (Sandbox Code Playgroud)

使用该-E标志,您可以保留当前的环境变量(包括$GOPATH).

  • 我必须这样做:`sudo -E/usr/local/go/bin/go get golang.org/x/tools/cmd/godoc`.否则,我得到`sudo:go:command not found`(即使我的root shell有一条路径'go`:/ (3认同)

Srg*_*grn 5

请参阅@mrd0ll4r 答案,哪个更好。( /sf/answers/2362889651/ )

更新

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

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

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

sudo su 
export GOROOT="/usr/lib/go"
export GOPATH="/home/utkbansal/go"
go get -u golang.org/x/tools/cmd/...
# other commands
exit
Run Code Online (Sandbox Code Playgroud)