| # go/build's Import should find modules by invoking the go command |
| |
| go build -o $WORK/testimport.exe ./testimport |
| |
| # GO111MODULE=off |
| env GO111MODULE=off |
| ! exec $WORK/testimport.exe x/y/z/w . |
| |
| # GO111MODULE=auto in GOPATH/src |
| env GO111MODULE= |
| ! exec $WORK/testimport.exe x/y/z/w . |
| env GO111MODULE=auto |
| ! exec $WORK/testimport.exe x/y/z/w . |
| |
| # GO111MODULE=auto outside GOPATH/src |
| cd $GOPATH/other |
| env GO111MODULE= |
| exec $WORK/testimport.exe other/x/y/z/w . |
| stdout w2.go |
| |
| ! exec $WORK/testimport.exe x/y/z/w . |
| stderr 'cannot find module providing package x/y/z/w' |
| |
| cd z |
| env GO111MODULE=auto |
| exec $WORK/testimport.exe other/x/y/z/w . |
| stdout w2.go |
| |
| # GO111MODULE=on outside GOPATH/src |
| env GO111MODULE=on |
| exec $WORK/testimport.exe other/x/y/z/w . |
| stdout w2.go |
| |
| # GO111MODULE=on in GOPATH/src |
| cd $GOPATH/src |
| exec $WORK/testimport.exe x/y/z/w . |
| stdout w1.go |
| cd w |
| exec $WORK/testimport.exe x/y/z/w .. |
| stdout w1.go |
| |
| -- go.mod -- |
| module x/y/z |
| |
| -- z.go -- |
| package z |
| |
| -- w/w1.go -- |
| package w |
| |
| -- testimport/x.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "go/build" |
| "log" |
| "os" |
| "strings" |
| ) |
| |
| func main() { |
| p, err := build.Import(os.Args[1], os.Args[2], 0) |
| if err != nil { |
| log.Fatal(err) |
| } |
| fmt.Printf("%s\n%s\n", p.Dir, strings.Join(p.GoFiles, " ")) |
| } |
| |
| -- $GOPATH/other/go.mod -- |
| module other/x/y |
| |
| -- $GOPATH/other/z/w/w2.go -- |
| package w |