golang build -i -a失败(权限被拒绝)

时间:2017-09-04 08:09:51

标签: ubuntu go build goland

我是个新手。

我已经从我的ubuntu上的官方二进制发行版安装了golang 1.9。我还安装了Gogland IDE。

当我尝试使用Gogland调试最简单的go程序(“hello world”)时,我收到以下错误:

GOROOT=/usr/local/go
GOPATH=/home/user/go
/usr/local/go/bin/go build -i -o /tmp/defaultgo -gcflags "-N -l" -a /home/user/go/src/hello/hello.go
go install runtime/internal/sys: open /usr/local/go/pkg/linux_amd64/runtime/internal/sys.a: permission denied

当尝试从命令行构建(不使用Gogland)时,我注意到每当我使用-i -a开关时都会出现相同的错误。

2 个答案:

答案 0 :(得分:4)

编辑:EAP 13刚刚发布,它修复了这个特定问题。请参阅:https://blog.jetbrains.com/go/2017/09/04/gogland-eap-13-better-completion-new-inspections-fixed-performance-bugs-and-more/

原件:

这是因为Delve for Go 1.9项目的升级支持。

最新版本的Delve将使用-a来重新编译所有传递依赖项,并确保它们中没有一个包含在其优化版本中,而不是调试友好版本中,以便它可以消除许多潜在的错误。

您可以删除-i标志,以便不安装依赖项,这不应再导致错误。

这有望在Go 1.10中得到改善,因为Go团队会有变化。

希望这能解释这个问题,如果没有,请参阅此处的讨论:https://youtrack.jetbrains.com/issue/GO-4382

编辑:这将在EAP 13中解决,该版本很快就会发布,请参阅此处的跟踪问题:https://youtrack.jetbrains.com/issue/GO-4430,因为它包含有关此问题的其他详细信息

答案 1 :(得分:0)

-a命令行选项告诉go工具重建“所有 Go”,这包括Go标准库甚至Go运行时本身 - 链接到每个Go程序的东西,它实际上实现了goroutines和所有有趣的位。

由于您已将Go安装到最终用户通常无法写入的位置(/usr/local/go),因此尝试重新编译和更新其中的文件(/usr/local/go/pkg)会因“权限被拒绝”而失败。

主要的一点是,在您非常了解自己想要实现的目标之前,您需要将-a传递给go build的情况完全为零,这将在您的学习中提及曲线; - )

所以请做@Volker说的话:

  • 请勿设置GOROOT
  • 请勿将-ago build一起使用。

使用go install代替go build也更为条件 - 原因如此 解释here