doc/go1.22.html | 91 +++++++++++++++++++++++++++-------------------------- src/cmd/go/alldocs.go | 3 --- src/cmd/go/internal/base/goflags.go | 10 +++++----- src/cmd/go/internal/modcmd/init.go | 3 --- src/cmd/go/internal/modfetch/fetch.go | 20 ++++++++++---------- src/cmd/go/internal/test/testflag.go | 2 +- src/cmd/go/internal/toolchain/exec.go | 6 +++--- src/cmd/go/internal/toolchain/select.go | 56 ++++++++++++++++++++--------------------------------- src/cmd/go/internal/vet/vetflag.go | 2 +- src/cmd/go/main.go | 2 +- src/cmd/go/testdata/script/install_modcacherw_issue64282.txt | 32 -------------------------------- src/cmd/go/testdata/script/malformed_gosum_issue62345.txt | 2 +- src/cmd/go/testdata/script/work_sum_mismatch.txt | 4 ++-- diff --git a/doc/go1.22.html b/doc/go1.22.html index c2bcef30533c209762e30621da04a247424790d9..d265541a59fc3a020ccfc9eaff0c08e74ceefe98 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -83,19 +83,20 @@ can contain the dependencies of either the workspace or of the module, but not both.

- +

- -

- - -

- + go get is no longer supported outside of a module in the + legacy GOPATH mode (that is, with GO111MODULE=off). + Other build commands, such as go build and + go test, will continue to work indefinitely + for legacy GOPATH programs.

- + go mod init no longer attempts to import + module requirements from configuration files for other vendoring tools + (such as Gopkg.lock).

@@ -135,9 +136,9 @@

Vet

-

- TODO: https://go.dev/cl/539016: go/analysis/passes/loopclosure: disable checker after go1.22.; loopclosure was modified to only not report in files with GoVersion after 1.22. -

+ + +

New warnings for missing values after append

@@ -359,7 +360,7 @@

We plan to include an API migration tool in a future release, likely Go 1.23.

-

+

Enhanced routing patterns

HTTP routing in the standard library is now more expressive. @@ -407,9 +408,9 @@ in mind. There are also various performance improvements, not enumerated here.

-

- TODO: complete this section -

+ + +
archive/tar
@@ -649,17 +650,17 @@

-
html/template
-
-

- TODO: https://go.dev/issue/61619: allow actions in JS template literals -

+ + + + + -

- TODO: https://go.dev/cl/507995: html/template: support parsing complex JS template literals; modified api/next/61619.txt -

-
-
+ + + + +
io
@@ -727,31 +728,31 @@ The previous behavior may be restored by setting GODEBUG field httplaxcontentlength=1.

-

- TODO: https://go.dev/cl/528355: net/http: implement path value methods on Request; modified api/next/61410.txt -

+ + +
-
net/http/cgi
-
-

- TODO: https://go.dev/cl/539615: net/http/cgi: the PATH_INFO should be empty or start with a slash -

-
-
+ + + + + + + -
net/netip
-
-

- TODO: https://go.dev/issue/61642: add Prefix.Compare and AddrPort.Compare -

+ + + + + -

- TODO: https://go.dev/cl/524616: net/netip: add AddrPort.Compare and Prefix.Compare; modified api/next/61642.txt -

-
-
+ + + + +
os
diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index a40d0556ff142be4650a4bd4908059d4ab53176a..e61e865c84a8f77b06196c584f29f5f8bda3640b 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -1324,9 +1324,6 @@ // module path argument is omitted, init will attempt to infer the module path // using import comments in .go files, vendoring tool configuration files (like // Gopkg.lock), and the current directory (if in GOPATH). // -// If a configuration file for a vendoring tool is present, init will attempt to -// import module requirements from it. -// // See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'. // // # Add missing and remove unused modules diff --git a/src/cmd/go/internal/base/goflags.go b/src/cmd/go/internal/base/goflags.go index 3d5a76d54b758d4ec6b416d36b0ad932278f0ddb..eced2c5d5822682792727bb6335589ea14f88707 100644 --- a/src/cmd/go/internal/base/goflags.go +++ b/src/cmd/go/internal/base/goflags.go @@ -88,7 +88,7 @@ IsBoolFlag() bool } // SetFromGOFLAGS sets the flags in the given flag set using settings in $GOFLAGS. -func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) { +func SetFromGOFLAGS(flags *flag.FlagSet) { InitGOFLAGS() // This loop is similar to flag.Parse except that it ignores @@ -121,22 +121,22 @@ // call to flags.Visit will correctly visit the flags that have been set. if fb, ok := f.Value.(boolFlag); ok && fb.IsBoolFlag() { if hasValue { - if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, value); err != nil { fmt.Fprintf(flags.Output(), "go: invalid boolean value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } } else { - if err := flags.Set(f.Name, "true"); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, "true"); err != nil { fmt.Fprintf(flags.Output(), "go: invalid boolean flag %s (from %s): %v\n", name, where, err) flags.Usage() } } } else { - if !hasValue && !ignoreErrors { + if !hasValue { fmt.Fprintf(flags.Output(), "go: flag needs an argument: %s (from %s)\n", name, where) flags.Usage() } - if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, value); err != nil { fmt.Fprintf(flags.Output(), "go: invalid value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } diff --git a/src/cmd/go/internal/modcmd/init.go b/src/cmd/go/internal/modcmd/init.go index e4be73fab0bc96733cf1d2b1038ea4aa3ed1889d..facdaa9911c36514539e413e6778751191c5eb33 100644 --- a/src/cmd/go/internal/modcmd/init.go +++ b/src/cmd/go/internal/modcmd/init.go @@ -25,9 +25,6 @@ module path argument is omitted, init will attempt to infer the module path using import comments in .go files, vendoring tool configuration files (like Gopkg.lock), and the current directory (if in GOPATH). -If a configuration file for a vendoring tool is present, init will attempt to -import module requirements from it. - See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'. `, Run: runInit, diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index b3c77dfbc21786ef6d8a43c6d6d0d8633160d87c..eeab6da62a2daddf5cc3de7df47b512b20157c5e 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -525,7 +525,7 @@ if cfg.CmdName == "mod tidy" { // ignore malformed line so that go mod tidy can fix go.sum continue } else { - base.Fatalf("go: malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) + base.Fatalf("malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) } } if f[2] == emptyGoModHash { @@ -574,32 +574,32 @@ func checkMod(ctx context.Context, mod module.Version) { // Do the file I/O before acquiring the go.sum lock. ziphash, err := CachePath(ctx, mod, "ziphash") if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } data, err := lockedfile.Read(ziphash) if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } data = bytes.TrimSpace(data) if !isValidSum(data) { // Recreate ziphash file from zip file and use that to check the mod sum. zip, err := CachePath(ctx, mod, "zip") if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } err = hashZip(mod, zip, ziphash) if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } return } h := string(data) if !strings.HasPrefix(h, "h1:") { - base.Fatalf("go: verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) + base.Fatalf("verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) } if err := checkModSum(mod, h); err != nil { - base.Fatal(err) + base.Fatalf("%s", err) } } @@ -684,7 +684,7 @@ if h == vh { return true } if strings.HasPrefix(vh, "h1:") { - base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) } } // Also check workspace sums. @@ -696,7 +696,7 @@ for _, vh := range goSums[mod] { if h == vh { foundMatch = true } else if strings.HasPrefix(vh, "h1:") { - base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) } } } @@ -895,7 +895,7 @@ goSum.mu.Lock() defer goSum.mu.Unlock() inited, err := initGoSum() if err != nil { - base.Fatal(err) + base.Fatalf("%s", err) } if !inited { return diff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go index 22c3ab13021628c983fbf7d4ff38e8b785c6a9d7..425378889d9af06da941763ab25c90ca4f81142c 100644 --- a/src/cmd/go/internal/test/testflag.go +++ b/src/cmd/go/internal/test/testflag.go @@ -222,7 +222,7 @@ // // go test fmt -custom-flag-for-fmt-test // go test -x math func testFlags(args []string) (packageNames, passToTest []string) { - base.SetFromGOFLAGS(&CmdTest.Flag, false) + base.SetFromGOFLAGS(&CmdTest.Flag) addFromGOFLAGS := map[string]bool{} CmdTest.Flag.Visit(func(f *flag.Flag) { if short := strings.TrimPrefix(f.Name, "test."); passFlagToTest[short] { diff --git a/src/cmd/go/internal/toolchain/exec.go b/src/cmd/go/internal/toolchain/exec.go index acfb9e943ca77af54ba0001f97c0be675d35cd15..820fe93e87c377e770b7fe1573de50a74f12dc3d 100644 --- a/src/cmd/go/internal/toolchain/exec.go +++ b/src/cmd/go/internal/toolchain/exec.go @@ -44,12 +44,12 @@ if e, ok := err.(*exec.ExitError); ok && e.ProcessState != nil { if e.ProcessState.Exited() { os.Exit(e.ProcessState.ExitCode()) } - base.Fatalf("go: exec %s: %s", gotoolchain, e.ProcessState) + base.Fatalf("exec %s: %s", gotoolchain, e.ProcessState) } - base.Fatalf("go: exec %s: %s", exe, err) + base.Fatalf("exec %s: %s", exe, err) } os.Exit(0) } err := syscall.Exec(exe, os.Args, os.Environ()) - base.Fatalf("go: exec %s: %v", gotoolchain, err) + base.Fatalf("exec %s: %v", gotoolchain, err) } diff --git a/src/cmd/go/internal/toolchain/select.go b/src/cmd/go/internal/toolchain/select.go index 84fa7f685c97b7ec4e02f83fff3510bfb0ac0c26..9fd1549a61bbc1143747d04291f36b36d2ec5fea 100644 --- a/src/cmd/go/internal/toolchain/select.go +++ b/src/cmd/go/internal/toolchain/select.go @@ -8,10 +8,10 @@ import ( "context" "errors" - "flag" "fmt" "go/build" "io/fs" + "log" "os" "path/filepath" "runtime" @@ -20,12 +20,10 @@ "strings" "cmd/go/internal/base" "cmd/go/internal/cfg" - "cmd/go/internal/cmdflag" "cmd/go/internal/gover" "cmd/go/internal/modfetch" "cmd/go/internal/modload" "cmd/go/internal/run" - "cmd/go/internal/work" "golang.org/x/mod/module" ) @@ -87,6 +85,9 @@ // or go.mod file. // It must be called early in startup. // See https://go.dev/doc/toolchain#select. func Select() { + log.SetPrefix("go: ") + defer log.SetPrefix("") + if !modload.WillBeEnabled() { return } @@ -132,15 +133,15 @@ if min != "local" { v := gover.FromToolchain(min) if v == "" { if plus { - base.Fatalf("go: invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) + base.Fatalf("invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) } - base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) } minToolchain = min minVers = v } if plus && suffix != "auto" && suffix != "path" { - base.Fatalf("go: invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) } mode = suffix } @@ -171,7 +172,7 @@ // (If it is equal, then min satisfies it anyway: that can matter if min // has a suffix like "go1.21.1-foo" and toolchain is "go1.21.1".) toolVers := gover.FromToolchain(toolchain) if toolVers == "" || (!strings.HasPrefix(toolchain, "go") && !strings.Contains(toolchain, "-go")) { - base.Fatalf("go: invalid toolchain %q in %s", toolchain, base.ShortPath(file)) + base.Fatalf("invalid toolchain %q in %s", toolchain, base.ShortPath(file)) } if gover.Compare(toolVers, minVers) > 0 { gotoolchain = toolchain @@ -193,7 +194,7 @@ // This check is delayed until after the handling of auto and path // so that we have initialized gover.Startup for use in error messages. if target := os.Getenv(targetEnv); target != "" && TestVersionSwitch != "loop" { if gover.LocalToolchain() != target { - base.Fatalf("go: toolchain %v invoked to provide %v", gover.LocalToolchain(), target) + base.Fatalf("toolchain %v invoked to provide %v", gover.LocalToolchain(), target) } os.Unsetenv(targetEnv) @@ -224,7 +225,7 @@ // We want to allow things like go1.20.3 but also gccgo-go1.20.3. // We want to disallow mistakes / bad ideas like GOTOOLCHAIN=bash, // since we will find that in the path lookup. if !strings.HasPrefix(gotoolchain, "go1") && !strings.Contains(gotoolchain, "-go1") { - base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) } Exec(gotoolchain) @@ -243,6 +244,8 @@ // If $GOTOOLCHAIN is set to path or min+path, Exec only considers the PATH // as a source of Go toolchains. Otherwise Exec tries the PATH but then downloads // a toolchain if necessary. func Exec(gotoolchain string) { + log.SetPrefix("go: ") + writeBits = sysWriteBits() count, _ := strconv.Atoi(os.Getenv(countEnv)) @@ -250,7 +253,7 @@ if count >= maxSwitch-10 { fmt.Fprintf(os.Stderr, "go: switching from go%v to %v [depth %d]\n", gover.Local(), gotoolchain, count) } if count >= maxSwitch { - base.Fatalf("go: too many toolchain switches") + base.Fatalf("too many toolchain switches") } os.Setenv(countEnv, fmt.Sprint(count+1)) @@ -273,7 +276,7 @@ fallthrough case "loop", "mismatch": exe, err := os.Executable() if err != nil { - base.Fatal(err) + base.Fatalf("%v", err) } execGoToolchain(gotoolchain, os.Getenv("GOROOT"), exe) } @@ -288,7 +291,7 @@ // GOTOOLCHAIN=auto looks in PATH and then falls back to download. // GOTOOLCHAIN=path only looks in PATH. if pathOnly { - base.Fatalf("go: cannot find %q in PATH", gotoolchain) + base.Fatalf("cannot find %q in PATH", gotoolchain) } // Set up modules without an explicit go.mod, to download distribution. @@ -307,9 +310,9 @@ } dir, err := modfetch.Download(context.Background(), m) if err != nil { if errors.Is(err, fs.ErrNotExist) { - base.Fatalf("go: download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) + base.Fatalf("download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) } - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } // On first use after download, set the execute bits on the commands @@ -318,7 +321,7 @@ // doing this at the same time, but if so no harm done. if runtime.GOOS != "windows" { info, err := os.Stat(filepath.Join(dir, "bin/go")) if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } if info.Mode()&0111 == 0 { // allowExec sets the exec permission bits on all files found in dir. @@ -339,7 +342,7 @@ } return nil }) if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } } @@ -381,7 +384,7 @@ if err == nil { err = raceSafeCopy(srcUGoMod, srcGoMod) } if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } } @@ -472,7 +475,7 @@ } data, err := os.ReadFile(file) if err != nil { - base.Fatal(err) + base.Fatalf("%v", err) } return file, gover.GoModLookup(data, "go"), gover.GoModLookup(data, "toolchain") } @@ -489,7 +492,6 @@ } // Check for pkg@version. var arg string - var cmdFlags *flag.FlagSet switch os.Args[1] { default: return false @@ -498,7 +500,6 @@ // We would like to let 'go install -newflag pkg@version' work even // across a toolchain switch. To make that work, assume the pkg@version // is the last argument and skip the flag parsing. arg = os.Args[len(os.Args)-1] - cmdFlags = &work.CmdInstall.Flag case "run": // For run, the pkg@version can be anywhere on the command line, // because it is preceded by run flags and followed by arguments to the @@ -506,7 +507,6 @@ // program being run. To handle that precisely, we have to interpret the // flags a little bit, to know whether each flag takes an optional argument. // We can still allow unknown flags as long as they have an explicit =value. args := os.Args[2:] - cmdFlags = &run.CmdRun.Flag for i := 0; i < len(args); i++ { a := args[i] if !strings.HasPrefix(a, "-") { @@ -553,20 +553,6 @@ path, version, _ := strings.Cut(arg, "@") if path == "" || version == "" || gover.IsToolchain(path) { return false } - - // Make a best effort to parse flags so that module flags like -modcacherw - // will take effect (see https://go.dev/issue/64282). - args := os.Args[2:] - for len(args) > 0 { - var err error - _, args, err = cmdflag.ParseOne(cmdFlags, args) - if errors.Is(err, cmdflag.ErrFlagTerminator) { - break - } - // Ignore all other errors: they may be new flags — or updated syntax for - // existing flags — intended for a newer Go toolchain. - } - base.SetFromGOFLAGS(cmdFlags, true) // It would be correct to simply return true here, bypassing use // of the current go.mod or go.work, and let "go run" or "go install" diff --git a/src/cmd/go/internal/vet/vetflag.go b/src/cmd/go/internal/vet/vetflag.go index 601ae9aa64ba1632ed29b11aee89c82fbef6ebc5..eb7af6508d00be6debf34945e1188c9babd63ead 100644 --- a/src/cmd/go/internal/vet/vetflag.go +++ b/src/cmd/go/internal/vet/vetflag.go @@ -116,7 +116,7 @@ } // Record the set of vet tool flags set by GOFLAGS. We want to pass them to // the vet tool, but only if they aren't overridden by an explicit argument. - base.SetFromGOFLAGS(&CmdVet.Flag, false) + base.SetFromGOFLAGS(&CmdVet.Flag) addFromGOFLAGS := map[string]bool{} CmdVet.Flag.Visit(func(f *flag.Flag) { if isVetFlag[f.Name] { diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index b309cb867ab264fa381daf7a00e960c133b78bbc..d380aae489436f8e531803beaef4f86dfd4c1bb6 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -234,7 +234,7 @@ cmd.Flag.Usage = func() { cmd.Usage() } if cmd.CustomFlags { args = args[1:] } else { - base.SetFromGOFLAGS(&cmd.Flag, false) + base.SetFromGOFLAGS(&cmd.Flag) cmd.Flag.Parse(args[1:]) args = cmd.Flag.Args() } diff --git a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt b/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt deleted file mode 100644 index ea644f789ea2f240a7bbe1da0681d2536bcfd2c0..0000000000000000000000000000000000000000 --- a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Regression test for https://go.dev/issue/64282: -# 'go install' and 'go run' with pkg@version arguments should make -# a best effort to parse flags before they download modules to -# identify which toolchain version to use, because those flags -# may affect the downloaded contents. - -# However, the best-effort flag parsing should not interfere with -# actual flag parsing if we don't switch toolchains. In particular, -# unrecognized flags should still be diagnosed after the module for -# the requested package has been downloaded and checked for toolchain -# upgrades. - -! go install -cake=delicious -modcacherw example.com/printversion@v0.1.0 -stderr '^flag provided but not defined: -cake$' - -[!short] go install -modcacherw example.com/printversion@v0.1.0 - # Because the -modcacherw flag was set, we should be able to modify the contents - # of a directory within the module cache. -cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go - - -# We should also apply flags from GOFLAGS at this step. - -go clean -modcache -env GOFLAGS=-modcacherw -! go install -cake=delicious example.com/printversion@v0.1.0 -stderr '^flag provided but not defined: -cake$' -cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go - - --- $WORK/extraneous.txt -- -This is not a Go source file. diff --git a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt index 35fad2919326f3e04801e6319c395b4735a173b9..23c41beae90ae39e3aa01cb7640195223515eb3c 100644 --- a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt +++ b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt @@ -1,5 +1,5 @@ ! go mod download -stderr '^go: malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' +stderr '^malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' go mod tidy cmp go.sum go.sum.after-tidy diff --git a/src/cmd/go/testdata/script/work_sum_mismatch.txt b/src/cmd/go/testdata/script/work_sum_mismatch.txt index d4997aa37246e0328125a8d201df9bfa47e81c7c..ca5d71dc5e73c73a213488ca6518ad3e000367c0 100644 --- a/src/cmd/go/testdata/script/work_sum_mismatch.txt +++ b/src/cmd/go/testdata/script/work_sum_mismatch.txt @@ -4,7 +4,7 @@ ! go run ./a cmpenv stderr want-error -- want-error -- -go: verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch +verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch downloaded: h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= $WORK${/}gopath${/}src${/}a${/}go.sum: h1:U1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -58,4 +58,4 @@ ) func main() { fmt.Println(quote.Hello()) -} +} \ No newline at end of file