diff --git a/src/cmd/go/internal/modload/search.go b/src/cmd/go/internal/modload/search.go index 2e82b92cc5..2cd657326c 100644 --- a/src/cmd/go/internal/modload/search.go +++ b/src/cmd/go/internal/modload/search.go @@ -105,7 +105,14 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] } if cfg.BuildMod == "vendor" { - walkPkgs(filepath.Join(ModRoot(), "vendor"), "", false) + if HasModRoot() { + modPrefix := Target.Path + if Target.Path == "std" { + modPrefix = "" + } + walkPkgs(ModRoot(), modPrefix, false) + walkPkgs(filepath.Join(ModRoot(), "vendor"), "", false) + } return pkgs } diff --git a/src/cmd/go/testdata/script/mod_vendor_build.txt b/src/cmd/go/testdata/script/mod_vendor_build.txt index 01ee2d202a..da3fd91055 100644 --- a/src/cmd/go/testdata/script/mod_vendor_build.txt +++ b/src/cmd/go/testdata/script/mod_vendor_build.txt @@ -25,6 +25,10 @@ env GOPROXY=off ! go list ... go list -mod=vendor ... +# However, it should still list packages in the main module. +go list -mod=vendor m/... +stdout m + -- go.mod -- module m