| [short] skip 'runs go build' |
| |
| # First run: executable for bar is not cached. |
| # Make sure it's not called a.out |
| go tool bar |
| stdout 'my name is: bar'$GOEXE |
| ! stdout 'a.out' |
| |
| # Second run: executable is cached. Make sure it |
| # has the right name. |
| go tool bar |
| stdout 'my name is: bar'$GOEXE |
| ! stdout 'a.out' |
| |
| # Third run: with arguments |
| # https://go.dev/issue/70509 |
| go tool bar --baz |
| stdout 'my name is: bar'$GOEXE |
| ! stdout 'a.out' |
| |
| # Test tool package paths that end in v2 |
| # to ensure we use the second to last component. |
| |
| # Don't use v2 as the short name of the tool. |
| ! go tool v2 |
| stderr 'go: no such tool "v2"' |
| |
| # Use the second to last component as the short |
| # name of the tool. |
| go tool foo |
| stdout 'my name is: foo'$GOEXE |
| |
| # go run should use the same name for the tool |
| # We need to use a fresh cache, or we'd end up with an executable cache hit |
| # from when we ran built the tool to run go tool above, and we'd just |
| # reuse the name from the test case above. |
| env GOCACHE=$WORK/cache2 |
| go run example.com/foo/v2 |
| stdout 'my name is: foo'$GOEXE |
| |
| -- go.mod -- |
| module example.com/foo |
| |
| go 1.24 |
| |
| tool example.com/foo/bar |
| tool example.com/foo/v2 |
| |
| require example.com/foo/v2 v2.0.0 |
| |
| replace example.com/foo/v2 => ./v2 |
| -- bar/bar.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "path/filepath" |
| ) |
| |
| func main() { |
| fmt.Println("my name is:", filepath.Base(os.Args[0])) |
| } |
| -- v2/go.mod -- |
| module example.com/foo/v2 |
| |
| go 1.24 |
| -- v2/main.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "path/filepath" |
| ) |
| |
| func main() { |
| fmt.Println("my name is:", filepath.Base(os.Args[0])) |
| } |