On Tue, Mar 9, 2021 at 10:09 AM tapi...@gmail.com <tapir....@gmail.com> wrote:
> 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. 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. > That is true. I think the practicalities of being able to run go tools without configuration or environment variables outweigh this, though. For example, if a user installs go and (say) goimports from their distribution repository, we want the goimports binary to be able to find stdlib packages, even if the user does not have GOROOT set. Having the actual filesystem paths built in also simplifies debugging - it means a debugger can find the files and show you source information. While `go env GOROOT` might be able to replace the fallback for the former use-case, it wouldn't be available to the debugger. Note that you can always remove any host-specific information by building a go release in a generic path and use that to build go packages. That is also what happens if you use a go release provided by your distribution. So the downsides don't seem enormous, given that you can always circumvent them with relatively little hassle. > On Tuesday, March 9, 2021 at 2:53:19 AM UTC-5 axel.wa...@googlemail.com > wrote: > >> https://golang.org/pkg/runtime/#GOROOT >> >> 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. >> >> >> I don't understand how you expect a binary to find GOROOT otherwise, if >> you don't set the environment variable. >> >> On Tue, Mar 9, 2021 at 6:38 AM tapi...@gmail.com <tapi...@gmail.com> >> wrote: >> >>> 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 is >>> >>> unsafePkg, err := build.Import("unsafe", "", build.FindOnly) >>> if err != nil { >>> log.Fatal(fmt.Errorf("build.Import: %w", err)) >>> } >>> >>> The error is >>> >>> build.Import: go/build: go list unsafe: exit status 2 >>> go: 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 >>> <https://groups.google.com/d/msgid/golang-nuts/c02407eb-2fec-4195-8ef3-46a33e233c66n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > 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+unsubscr...@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 > <https://groups.google.com/d/msgid/golang-nuts/d5011895-955d-4400-ab65-122d68dd93d2n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFqO08PqBhyuSGncfdyhO%2By1t4GrpXZ1N3Fz8K0X9s_Mw%40mail.gmail.com.