Skip to content

cmd/go: mismatched line number and import path in error messages #72896

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
tigarmo opened this issue Mar 16, 2025 · 2 comments
Open

cmd/go: mismatched line number and import path in error messages #72896

tigarmo opened this issue Mar 16, 2025 · 2 comments
Assignees
Labels
BugReport Issues describing a possible bug in the Go implementation. GoCommand cmd/go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.

Comments

@tigarmo
Copy link

tigarmo commented Mar 16, 2025

What version of Go are you using (go version)?

$ go version
go version go1.24.1 linux/amd64

Does this issue reproduce with the latest release?

Yes (this is the latest release at time of writing)

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/tiago/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/tiago/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3848929413=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/home/tiago/Projects/go/work-repro3/hello/go.mod'
GOMODCACHE='/home/tiago/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/tiago/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/snap/go/10866'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/tiago/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/snap/go/10866/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.1'
GOWORK='/home/tiago/Projects/go/work-repro3/go.work'
PKG_CONFIG='pkg-config'
uname -sr: Linux 6.8.0-52-generic
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.5 LTS
Release:	22.04
Codename:	jammy
/lib/x86_64-linux-gnu/libc.so.6: GNU C Library (Ubuntu GLIBC 2.35-0ubuntu3.9) stable release version 2.35.
gdb --version: GNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1

What did you do?

I'm attempting to use go workspaces with GOPROXY=off to ensure I have all required sources locally. In the middle of this work, I have a single module and a workspace with the following local structure:

$ find .
.
./hello
./hello/go.mod
./hello/go.sum
./hello/hello.go
./go.work

go.work:

go 1.24.1

use ./hello

hello/go.mod:

module example.com/hello

go 1.24.1

require (
        golang.org/x/crypto v0.36.0
        golang.org/x/net v0.21.0
)

require golang.org/x/text v0.23.0 // indirect

hello/go.sum

golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=

hello/hello.go

package main

import (
        "fmt"

        "golang.org/x/crypto/acme/autocert"
        "golang.org/x/net/html/charset"
)

func main() {
        fmt.Println(autocert.DefaultACMEDirectory)
        _, name := charset.Lookup("ble")
        fmt.Println("Lookup: ", name)
}

Then I run GOPROXY="off" go build hello.go from the hello directory.

What did you expect to see?

I expected error messages related to golang.org/x/crypto and golang.org/x/net being unavailable because they are not in the workspace and can't be found/downloaded because of GOPROXY=off.

What did you see instead?

This is the error output:

hello.go:6:2: golang.org/x/crypto@v0.36.0: module lookup disabled by GOPROXY=off
hello.go:7:2: golang.org/x/crypto@v0.36.0: module lookup disabled by GOPROXY=off

The first line is correct, but the second line in the error output (hello.go:7:2: golang.org/x/crypto@v0.36.0: module lookup disabled by GOPROXY=off), refers to line 7 on the source, which is the "golang.org/x/net/html/charset" import on the file listed above. The surprising behavior is that the import is for golang.org/x/net but the error message says it's for golang.org/x/crypto.

Additionally, when I run the command with JSON output (GOPROXY="off" go build -json hello.go) I get the same messages in the "Output" keys but the right paths in "ImportPath":

$ GOPROXY="off" go build -json hello.go
{"ImportPath":"golang.org/x/crypto/acme/autocert","Action":"build-output","Output":"hello.go:6:2: golang.org/x/crypto@v0.36.0: module lookup disabled by GOPROXY=off\n"}
{"ImportPath":"golang.org/x/crypto/acme/autocert","Action":"build-fail"}
{"ImportPath":"golang.org/x/net/html/charset","Action":"build-output","Output":"hello.go:7:2: golang.org/x/crypto@v0.36.0: module lookup disabled by GOPROXY=off\n"}
{"ImportPath":"golang.org/x/net/html/charset","Action":"build-fail"}

Finally, if I disable "workspace mode" by renaming the go.work file I get error messages that don't say explicitly which import failed, but at least don't give the wrong path:

$ mv ../go.work ../go.work.bak
$ GOPROXY="off" go build hello.go
go: downloading golang.org/x/net v0.21.0
go: downloading golang.org/x/crypto v0.36.0
hello.go:6:2: module lookup disabled by GOPROXY=off
hello.go:7:2: module lookup disabled by GOPROXY=off
@seankhliao seankhliao changed the title Surprising import paths in error messages when using workspaces and GOPROXY=off cmd/go mismatched line number and import path in error messages Mar 16, 2025
@gabyhelp gabyhelp added the BugReport Issues describing a possible bug in the Go implementation. label Mar 16, 2025
@ianlancetaylor ianlancetaylor changed the title cmd/go mismatched line number and import path in error messages cmd/go: mismatched line number and import path in error messages Mar 17, 2025
@ianlancetaylor ianlancetaylor added NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. GoCommand cmd/go labels Mar 17, 2025
@ianlancetaylor
Copy link
Member

CC @matloob @samthanawalla

May be a problem with the error caching in cmd/go/internal/modfetch.

@matloob matloob self-assigned this Mar 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BugReport Issues describing a possible bug in the Go implementation. GoCommand cmd/go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

4 participants