-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Open
Labels
GoCommandcmd/gocmd/goNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone
Description
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 ./bWhat did you see happen?
Here's the full output:
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.
bcmills
Metadata
Metadata
Assignees
Labels
GoCommandcmd/gocmd/goNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.