Index: go/src/cmd/go/pkg.go =================================================================== --- go.orig/src/cmd/go/pkg.go +++ go/src/cmd/go/pkg.go @@ -781,7 +781,13 @@ func (p *Package) load(stk *importStack, if goTools[p.ImportPath] == toTool { // This is for 'go tool'. // Override all the usual logic and force it into the tool directory. - p.target = filepath.Join(gorootPkg, "tool", full) + // If GOROOT_TARGET is set, then write to it for packaging purpose + gorootTarget := os.Getenv("GOROOT_TARGET") + if gorootTarget == "" { + p.target = filepath.Join(gorootPkg, "tool", full) + } else { + p.target = filepath.Join(gorootTarget, "pkg/tool", full) + } } if p.target != "" && buildContext.GOOS == "windows" { p.target += ".exe"