Go version
go version go1.21.6 linux/amd64
Output of go env in your module/workspace:
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/austin/.cache/go-build'
GOENV='/home/austin/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/austin/r/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/austin/r/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/austin/sdk/go1.21.6'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/austin/sdk/go1.21.6/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.6'
GCCGO='/usr/bin/gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/tmp/m/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build2463259172=/tmp/go-build -gno-record-gcc-switches'
What did you do?
go install golang.org/x/exp/cmd/txtar@latest
mkdir m
cd m
txtar -x <<EOF
-- go.mod --
module m
-- a/a.go --
package a
import _ "x"
-- b/b.go --
package b
import _ "x"
EOF
go list -deps -json ./a ./b
What did you see happen?
Here's the full output:
Details
a/a.go:3:8: package x is not in std (/home/austin/sdk/go1.21.6/src/x)
{
"ImportPath": "x",
"DepOnly": true,
"Incomplete": true,
"Stale": true,
"StaleReason": "build ID mismatch",
"Error": {
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
}
{
"Dir": "/tmp/m/a",
"ImportPath": "m/a",
"Name": "a",
"Root": "/tmp/m",
"Module": {
"Path": "m",
"Main": true,
"Dir": "/tmp/m",
"GoMod": "/tmp/m/go.mod",
"GoVersion": "1.16"
},
"Match": [
"./a"
],
"Incomplete": true,
"Stale": true,
"StaleReason": "stale dependency: x",
"GoFiles": [
"a.go"
],
"Imports": [
"x"
],
"Deps": [
"x"
],
"DepsErrors": [
{
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
]
}
{
"Dir": "/tmp/m/b",
"ImportPath": "m/b",
"Name": "b",
"Root": "/tmp/m",
"Module": {
"Path": "m",
"Main": true,
"Dir": "/tmp/m",
"GoMod": "/tmp/m/go.mod",
"GoVersion": "1.16"
},
"Match": [
"./b"
],
"Incomplete": true,
"Stale": true,
"StaleReason": "stale dependency: x",
"GoFiles": [
"b.go"
],
"Imports": [
"x"
],
"Deps": [
"x"
],
"DepsErrors": [
{
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
]
}
And just the bits I found surprising:
a/a.go:3:8: package x is not in std (/home/austin/sdk/go1.21.6/src/x)
{
"ImportPath": "x",
...
"Error": {
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
}
{
"ImportPath": "m/a",
...
"DepsErrors": [
{
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
]
}
{
"ImportPath": "m/b",
...
"DepsErrors": [
{
"ImportStack": [
"m/a"
],
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
]
}
Notably:
- Only the error in a is reported in the text output, not the bad import in b.
- The errors are reported as DepsErrors on packages a and b, rather than just Errors
- The error directly attributed to "package" x reports a position in package a (of the import of x)
- We see the same error in package b, attributed to the import line in a, even though a and b have no relationship
What did you expect to see?
I expected go list to report errors on packages a and b attributed to the bad import statements. That is, one error on package a at a/a.go:3 and another on package b at b/b.go:3. Something like:
a/a.go:3:8: package x is not in std (/home/austin/sdk/go1.21.6/src/x)
b/b.go:3:8: package x is not in std (/home/austin/sdk/go1.21.6/src/x)
{
"ImportPath": "m/a",
...
"Error": {
"ImportStack": null,
"Pos": "a/a.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
}
{
"ImportPath": "m/b",
...
"Error": {
"ImportStack": null,
"Pos": "b/b.go:3:8",
"Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)"
}
}
I'm not sure whether I expected it to report a package for "x" at all. If it did, that would presumably also need an error. The "x" package it currently reports is pretty weird because it's missing so many fields (like Dir). If it didn't report a package "x", it would probably have to omit "x" from the Imports and Deps lists, which I think would be fine.
Go version
go version go1.21.6 linux/amd64
Output of
go envin your module/workspace:What did you do?
What did you see happen?
Here's the full output:
Details
a/a.go:3:8: package x is not in std (/home/austin/sdk/go1.21.6/src/x) { "ImportPath": "x", "DepOnly": true, "Incomplete": true, "Stale": true, "StaleReason": "build ID mismatch", "Error": { "ImportStack": [ "m/a" ], "Pos": "a/a.go:3:8", "Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)" } } { "Dir": "/tmp/m/a", "ImportPath": "m/a", "Name": "a", "Root": "/tmp/m", "Module": { "Path": "m", "Main": true, "Dir": "/tmp/m", "GoMod": "/tmp/m/go.mod", "GoVersion": "1.16" }, "Match": [ "./a" ], "Incomplete": true, "Stale": true, "StaleReason": "stale dependency: x", "GoFiles": [ "a.go" ], "Imports": [ "x" ], "Deps": [ "x" ], "DepsErrors": [ { "ImportStack": [ "m/a" ], "Pos": "a/a.go:3:8", "Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)" } ] } { "Dir": "/tmp/m/b", "ImportPath": "m/b", "Name": "b", "Root": "/tmp/m", "Module": { "Path": "m", "Main": true, "Dir": "/tmp/m", "GoMod": "/tmp/m/go.mod", "GoVersion": "1.16" }, "Match": [ "./b" ], "Incomplete": true, "Stale": true, "StaleReason": "stale dependency: x", "GoFiles": [ "b.go" ], "Imports": [ "x" ], "Deps": [ "x" ], "DepsErrors": [ { "ImportStack": [ "m/a" ], "Pos": "a/a.go:3:8", "Err": "package x is not in std (/home/austin/sdk/go1.21.6/src/x)" } ] }And just the bits I found surprising:
Notably:
What did you expect to see?
I expected
go listto report errors on packages a and b attributed to the bad import statements. That is, one error on package a at a/a.go:3 and another on package b at b/b.go:3. Something like:I'm not sure whether I expected it to report a package for "x" at all. If it did, that would presumably also need an error. The "x" package it currently reports is pretty weird because it's missing so many fields (like Dir). If it didn't report a package "x", it would probably have to omit "x" from the
ImportsandDepslists, which I think would be fine.