GOROOT returns the root of the Go tree. It uses the GOROOT environment variable, if set at process start, or else the root used during the Go build.
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c02407eb-2fec-4195-8ef3-46a33e233c66n%40googlegroups.com.
1. By the document, it looks it should check the result of `go env GOROOT` firstly, but it doesn't.
2. It exposes some personal privacy to make the last attempt work. By the document, it looks some personal privacy will be always record in the binary file, even if the last attempt is not adopted in the end.
--On Tuesday, March 9, 2021 at 2:53:19 AM UTC-5 axel.wa...@googlemail.com wrote:https://golang.org/pkg/runtime/#GOROOTGOROOT returns the root of the Go tree. It uses the GOROOT environment variable, if set at process start, or else the root used during the Go build.I don't understand how you expect a binary to find GOROOT otherwise, if you don't set the environment variable.I have two machines, their GOROOTs are different.I build a binary on one machine then transfer the binary to the other.It runs well on the machine the binary is produced on, but fails on the other.The code reporting the error isunsafePkg, err := build.Import("unsafe", "", build.FindOnly)if err != nil {log.Fatal(fmt.Errorf("build.Import: %w", err))}The error isbuild.Import: go/build: go list unsafe: exit status 2go: cannot find GOROOT directory: /home/myname/path/of/GOROOT--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c02407eb-2fec-4195-8ef3-46a33e233c66n%40googlegroups.com.
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/d5011895-955d-4400-ab65-122d68dd93d2n%40googlegroups.com.
1. By the document, it looks it should check the result of `go env GOROOT` firstly, but it doesn't.I don't think that's true. The documentation says, it looks in $GOROOT and if that's not set, in the GOROOT of the go binary it was built on. `go env GOROOT`, on the other hand, first reports $GOROOT, if set, and otherwise reports the GOROOT *that particular go command resides in*. That is, `go env GOROOT` does not report $GOROOT, it also has its own, distinct fallback built in, which may differ from the one `foo` uses (if it was built with another go installation).That, again, seems like the correct choice - after all, we can't assume there actually *is* a go command, when we run `foo`. It is common to run a go binary on a system without a go installation.
But isn't assuming GOROOT exists almost equivalent to assuming "go" command exists?
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/3baa8c24-5eb1-48bf-9fef-9c94ec765e29n%40googlegroups.com.
But isn't assuming GOROOT exists almost equivalent to assuming "go" command exists?Maybe. As I said, it might have been possible to try `go env GOROOT` instead or in addition to looking at $GOROOT. It might even be possible to change that default now. There would likely still need to be *some* fallback (as exec'ing `go` might fail). I honestly don't know. I do know that the documentation currently does not say `go/build` is looking at `go env`, though, but that it directly inspects the environment.In any case, note that you can get whatever behavior you like by explicitly setting Context.GOROOT. Given that it's easy to overwrite the default behavior and given that `go/build` should, in practice, be considered to be superseded by `golang.org/x/tools/go/packages`, I don't personally feel much need to discuss the particulars. Maybe someone else has more of a stake in this.