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

golang build -i -a fails (permission denied)

我是围棋新手

我已经在 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 开关时都会遇到同样的错误。

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

由于您已将 Go 安装到最终用户通常无法写入的位置 (/usr/local/go),尝试重新编译和更新那里的文件 (/usr/local/go/pkg) 理所当然地失败了 "permission denied" .

主要的收获是,在您非常了解您想要实现的目标之前,您需要将 -a 传递给 go build 的情况恰好为零,这将在稍后的你的学习曲线 ;-)

所以请按照@Volker 所说的去做:

  • 不要设置GOROOT
  • 不要将 -ago build 一起使用。

也可以使用 go install 而不是 go build — 原因如下 解释 here.

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

原文:

发生这种情况是因为 Delve 升级了对 Go 1.9 项目的支持。

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

您可以删除 -i 标志,这样就不会安装依赖项,这样就不会再导致错误了。

这有望在 Go 1.10 中得到改进,因为根据 Go 团队的不同会有一些变化。

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

编辑:这将在即将发布的 EAP 13 中得到解决,请在此处查看跟踪问题:https://youtrack.jetbrains.com/issue/GO-4430 因为它包含有关此问题的更多详细信息