2015-11-17 95 views
2

当我运行go get时,我得到了拒绝权限错误,并且当我尝试sudo go get时,我得到了GOPATH未设置错误。无法安装Go包

[email protected]:~$ go get -u golang.org/x/tools/cmd/... 
go install golang.org/x/tools/cmd/godoc: open /usr/lib/go/bin/godoc: permission denied 

[email protected]:~$ 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 

这是我的$ PATH,去env和哪个去命令的结果。

[email protected]:~$ which go 
/usr/lib/go/bin/go 

[email protected]:~$ 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" 


[email protected]:~$ $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 

我该如何解决这个问题?

我使用go1.5从这个PPA https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/lxd-stable(PPA:Ubuntu的LXC/LXD稳定)

+0

您使用代理服务?而对于你的第二个错误,你确定你的Gopath包含src,pgk和bin目录吗? – KeylorSanchez

+0

'''utkbansal @戴尔:〜$ ls $ GOPATH'''给出 '''bin pkg src''' – utkbansal

+0

不要使用'sudo'。一旦你使用它,你已经改变了相关文件夹的权限(因此权限被拒绝)。删除'/ home/utkbansal/go'和下面,然后重新开始。 – elithrar

回答

8

godoc似乎是一般例外go get的做法,因为它安装到go安装($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(仍根)

这应该工作,我猜。但:为什么你想要更新godoc?如果您只想要一个未预先安装的特定工具,您应该可以在没有root权限的情况下使用go get

-1

`须藤GOPATH = path_to_go_installation去拿-u golang.org/x/tools/cmd/ .. 。

sudo - 以root身份运行后续命令。

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

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

+0

请解释你的代码 – bfontaine

2

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

UPDATE

,因为你用它首先试图更新已经安装的软件包,并有在/ usr/lib中/去/斌/ godoc

二进制-u标志

当你使用sudo运行它不会有你的环境变量,使其不再具有GOPATH变量

就可以进入根模式,并从那里

运行
+0

'root @戴尔:/ home/utkbansal#go get -u golang.org/x/tools/cmd/... package golang.org/x/tools/cmd/... :无法下载,$ GOPATH未设置。有关更多详细信息,请参阅:go help gopath ''' – utkbansal

+0

对不起,我忘了一行export GOROOT =“/ usr/lib/go” export GOPATH =“/ home/utkbansal/go” – Srgrn

6

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

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

与你持之以恒当前环境变量(包括$GOPATH)的-E标志。

+2

我不得不这样做:'sudo - E/usr/local/go/bin/go get golang.org/x/tools/cmd/godoc'。否则,我会得到'sudo:go:command not found'(即使我的根shell有一个路径去“go”:/ –

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 
1

同样的问题出现在我的电脑。问题是,我已经安装了,但不是godoc。而simples是安装非标准godoc(在我的Fedora安装DNF)进行说明

sudo dnf install golang-godoc 

感谢mrd0ll4r什么是错的

0

我想在这个线程所有的答案,也没有得到安装godoc。

sudo apt install golang-golang-x-tools

我相信我现在有一个版本godocs的比我的围棋版本旧,但我会忍受这一点。