diff --git a/go/packages/packages.go b/go/packages/packages.go index f40720d0..84a3dbb1 100644 --- a/go/packages/packages.go +++ b/go/packages/packages.go @@ -20,6 +20,7 @@ import ( "os" "path/filepath" "runtime" + "strings" "sync" "golang.org/x/tools/go/gcexportdata" @@ -685,8 +686,11 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { // This is only an approximation. // TODO(adonovan): derive Sizes from the underlying build system. goarch := runtime.GOARCH - if x, ok := os.LookupEnv("GOARCH"); ok { - goarch = x + const goarchPrefix = "GOARCH=" + for _, e := range ld.Config.Env { + if strings.HasPrefix(e, goarchPrefix) { + goarch = e[len(goarchPrefix):] + } } sizes := types.SizesFor("gc", goarch) diff --git a/go/packages/packages_test.go b/go/packages/packages_test.go index 4da9bb8b..fedf6faf 100644 --- a/go/packages/packages_test.go +++ b/go/packages/packages_test.go @@ -1052,15 +1052,11 @@ func TestSizes(t *testing.T) { }) defer cleanup() - savedGOARCH := os.Getenv("GOARCH") - defer os.Setenv("GOARCH", savedGOARCH) - for arch, wantWordSize := range map[string]int64{"386": 32, "amd64": 64} { - os.Setenv("GOARCH", arch) cfg := &packages.Config{ Mode: packages.LoadSyntax, Dir: tmp, - Env: append(os.Environ(), "GOPATH="+tmp, "GO111MODULE=off"), + Env: append(os.Environ(), "GOARCH="+arch, "GOPATH="+tmp, "GO111MODULE=off"), } initial, err := packages.Load(cfg, "a") if err != nil {