我是个新手。
我已经从我的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
开关时都会出现相同的错误。
答案 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
。-a
与go build
一起使用。使用go install
代替go build
也更为条件 - 原因如此
解释here。