On Tue, Mar 9, 2021 at 12:39 PM tapi...@gmail.com <tapir....@gmail.com>
wrote:

> 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 <https://golang.org/pkg/go/build/#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.


>
>>
>> 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...@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/3baa8c24-5eb1-48bf-9fef-9c94ec765e29n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/3baa8c24-5eb1-48bf-9fef-9c94ec765e29n%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/CAEkBMfHMifxf0MmLJJfh0Yq7-sqJSTiFGLxd9C6zTUmNGEpV%2BA%40mail.gmail.com.

Reply via email to