-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Description
What version of Go are you using (go version)?
$ go version go version go1.20 darwin/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env GOOS="darwin" GOARCH="amd64"
What did you do?
Run the following to create a module that vendors its dependencies and then run go list -e -json:
mkdir go-list-repro && cd $_
echo "module go-list-repro" > go.mod
echo 'package main; import _ "golang.org/x/tools/go/packages"; func main(){}' > main.go
go mod tidy
go mod vendor
go list -e -json golang.org/x/tools
What did you expect to see?
The JSON struct information for the requested module should contain the Dir field that indicates the directory for the module (the path should be in the vendor directory).
What did you see instead?
The JSON struct printed as part of the output does not have a Dir field:
go: finding module for package golang.org/x/tools
{
"ImportPath": "golang.org/x/tools",
"Match": [
"golang.org/x/tools"
],
"Incomplete": true,
"Error": {
"ImportStack": [],
"Pos": "",
"Err": "cannot query module due to -mod=vendor\n\t(Go version in go.mod is at least 1.14 and vendor directory exists.)"
}
}
This is the output of the command in the same directory using Go 1.19:
{
"Dir": "/Volumes/git/go/src/github.com/nmiyake/go-list-repro/vendor/golang.org/x/tools",
"ImportPath": "golang.org/x/tools",
"Target": "/Volumes/git/go/pkg/darwin_amd64/github.com/nmiyake/go-list-repro/vendor/golang.org/x/tools.a",
"Root": "/Volumes/git/go",
"Match": [
"golang.org/x/tools"
],
"Incomplete": true,
"Error": {
"ImportStack": [
"golang.org/x/tools"
],
"Pos": "",
"Err": "no Go files in /Volumes/git/go/src/github.com/nmiyake/go-list-repro/vendor/golang.org/x/tools"
}
}
For context, the code I wrote that depends on this is doing the following:
- "Given a local module that vendors its dependencies, find all of the paths to the imported modules in the vendor directory"
The output of go list through Go 1.19 allowed this to be done, but the behavior change in Go 1.20 breaks this workflow, and I'm unsure why the output changed in this case.
The error "cannot query module due to -mod=vendor\n\t(Go version in go.mod is at least 1.14 and vendor directory exists.)" is also misleading, since if the query is changed to be a package (golang.org/x/tools/go/packages), the list operation succeeds and prints the package information (even though the same condition of "Go version in go.mod is at least 1.14 and vendor directory exists." is still true).