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
。
- 不要将
-a
与 go 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 因为它包含有关此问题的更多详细信息
我是围棋新手
我已经在 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
。 - 不要将
-a
与go 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 因为它包含有关此问题的更多详细信息