| [!GOOS:windows] [short] stop 'this test only applies to Windows' |
| env GO111MODULE=off |
| |
| go build run_go.go |
| exec ./run_go$GOEXE $GOPATH $GOPATH/src/vend/hello |
| stdout 'hello, world' |
| |
| -- run_go.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "os/exec" |
| "path/filepath" |
| "strings" |
| ) |
| |
| func changeVolume(s string, f func(s string) string) string { |
| vol := filepath.VolumeName(s) |
| return f(vol) + s[len(vol):] |
| } |
| |
| func main() { |
| gopath := changeVolume(os.Args[1], strings.ToLower) |
| dir := changeVolume(os.Args[2], strings.ToUpper) |
| cmd := exec.Command("go", "run", "hello.go") |
| cmd.Dir = dir |
| cmd.Env = append(os.Environ(), "GOPATH="+gopath) |
| cmd.Stdout = os.Stdout |
| cmd.Stderr = os.Stderr |
| if err := cmd.Run(); err != nil { |
| fmt.Fprintln(os.Stderr, err) |
| os.Exit(1) |
| } |
| } |
| |
| -- vend/hello/hello.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "strings" // really ../vendor/strings |
| ) |
| |
| func main() { |
| fmt.Printf("%s\n", strings.Msg) |
| } |
| -- vend/vendor/strings/msg.go -- |
| package strings |
| |
| var Msg = "hello, world" |