Reputation: 33
I am a go newbie.
I have installed golang 1.9 from the official binary distribution on my ubuntu. I have also installed the Gogland IDE.
When I try to debug the simplest go program ("hello world") using Gogland, I get the following error:
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
When trying to build from the command line (not using Gogland), I noticed that I get the same error whenever I am using the -i -a
switches.
Upvotes: 3
Views: 9674
Reputation: 7477
Edit: EAP 13 was just released and it fixes this specific problem. Please see: https://blog.jetbrains.com/go/2017/09/04/gogland-eap-13-better-completion-new-inspections-fixed-performance-bugs-and-more/
Original:
This happens because of upgraded support from Delve for Go 1.9 projects.
The latest version of Delve will use -a
in order to recompile all transitive dependencies and ensure none of them are included with their optimized versions instead of the debugging friendly ones so that it can remove a lot of potential bugs.
You can remove the -i
flag so that the dependencies are not installed, which shouldn't cause the error anymore.
This will be improved hopefully in Go 1.10 as there are changes depending on the Go team.
Hope this explains the issue, if not, please see the discussion here: https://youtrack.jetbrains.com/issue/GO-4382
Edit: this will be addressed in the EAP 13, which is bound to be released very soon, see the tracking issue here: https://youtrack.jetbrains.com/issue/GO-4430 as it contains additional details regarding this problem
Upvotes: 4
Reputation: 55453
The -a
command-line option tells the go
tool to rebuild "everything Go", and this includes the Go standard library and even the Go runtime itself—that stuff linked to each Go program which actually implements goroutines and all the interesting bits.
Since you have Go installed into a location not normally writable by end users (/usr/local/go
), an attempt to recompile and update files there (/usr/local/go/pkg
) rightfully fails with "permission denied".
The main takeaway is that there is exactly zero cases you'd need to pass -a
to go build
until you very well understand what you want to achieve, and this will come quite later in your learning curve ;-)
So please do what @Volker said:
GOROOT
.-a
with go build
.Also condier using go install
instead of go build
— for the reasons
explained here.
Upvotes: 0