2

我是围棋新手。

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

4

2 回答 2

4

编辑: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重新编译所有传递依赖项,并确保它们都不包含在优化版本中,而不是调试友好的版本中,这样它就可以消除很多潜在的错误。

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

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

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

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

于 2017-09-04T11:14:51.223 回答
0

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

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

主要的收获是,在您非常了解自己想要实现的目标之前,您需要传递-a的案例恰好为零,这将在您的学习曲线中出现;-)go build

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

  • 不要设置GOROOT
  • 不要-ago build.

也使用 condiergo install代替go build- 原因解释在这里

于 2017-09-04T08:49:58.997 回答