golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
124.16k stars 17.69k forks source link

x/tools/gopls: packages.Load failure with conflicting go.work and go.mod toolchain versions #69646

Open remko-bw opened 2 months ago

remko-bw commented 2 months ago

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
* Run `go version` to get version of Go from _the VS Code integrated terminal_. - go version go1.22.7 darwin/arm64 * Run `gopls -v version` to get version of Gopls from _the VS Code integrated terminal_. - golang.org/x/tools/gopls v0.16.2 * Run `code -v` or `code-insiders -v` to get version of VS Code or VS Code Insiders. - 1.93.1 * Check your installed extensions to get the version of the VS Code Go extension - 0.42.1 * Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > `Go: Locate Configured Go Tools` command. - ``` ```# Tools Configuration ## Environment GOBIN: undefined toolsGopath: gopath: /Users/remko/.go GOROOT: /Users/remko/.go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.7.darwin-arm64 PATH: ... ## Tools go: /opt/homebrew/bin/go: go version go1.22.7 darwin/arm64 gopls: /Users/remko/.go/bin/gopls (version: v0.16.2 built with go: go1.22.7) gotests: /Users/remko/.go/bin/gotests (version: v1.6.0 built with go: go1.22.7) gomodifytags: /Users/remko/.go/bin/gomodifytags (version: v1.17.0 built with go: go1.22.7) impl: /Users/remko/.go/bin/impl (version: v1.4.0 built with go: go1.22.7) goplay: /Users/remko/.go/bin/goplay (version: v1.0.0 built with go: go1.22.7) dlv: /Users/remko/.go/bin/dlv (version: v1.23.0 built with go: go1.22.7) staticcheck: /Users/remko/.go/bin/staticcheck (version: v0.5.1 built with go: go1.22.7) ## Go env Workspace Folder (bw): /Users/remko/bw/bw GO111MODULE='' GOARCH='arm64' GOBIN='' GOCACHE='/Users/remko/Library/Caches/go-build' GOENV='/Users/remko/Library/Application Support/go/env' GOEXE='' GOEXPERIMENT='' GOFLAGS='' GOHOSTARCH='arm64' GOHOSTOS='darwin' GOINSECURE='' GOMODCACHE='/Users/remko/.go/pkg/mod' GONOPROXY='' GONOSUMDB='' GOOS='darwin' GOPATH='/Users/remko/.go' GOPRIVATE='' GOPROXY='https://proxy.golang.org,direct' GOROOT='/Users/remko/.go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.7.darwin-arm64' GOSUMDB='sum.golang.org' GOTMPDIR='' GOTOOLCHAIN='auto' GOTOOLDIR='/Users/remko/.go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.7.darwin-arm64/pkg/tool/darwin_arm64' GOVCS='' GOVERSION='go1.22.7' GCCGO='gccgo' AR='ar' CC='clang' CXX='clang++' CGO_ENABLED='1' GOMOD='/dev/null' GOWORK='/Users/remko/bw/bw/go.work' CGO_CFLAGS='-O2 -g' CGO_CPPFLAGS='' CGO_CXXFLAGS='-O2 -g' CGO_FFLAGS='-O2 -g' CGO_LDFLAGS='-O2 -g' PKG_CONFIG='pkg-config' GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/06/t4s5klwd24g25jxxgzbh6gwc0000gn/T/go-build439318135=/tmp/go-build -gno-record-gcc-switches -fno-common' ```

Share the Go related settings you have added/edited

  "go.lintTool": "staticcheck",
  "go.lintOnSave": "package",
  "go.vetOnSave": "package",
  "go.formatTool": "gofmt",
  "go.testFlags": ["-short"],
  "go.testEnvVars": {
    "NO_COLOR": "1"
  },
  "go.useLanguageServer": true,

Describe the bug

IntelliSense seems to be using the incorrect version of Go. I get the following error:

Screenshot 2024-09-16 at 10 47 56

I upgraded all my tools, and as you can see from the logs above, there is no mention of 1.22.5 anywhere. Still, I get the following in my gopls log:

Screenshot 2024-09-16 at 10 34 36

Note that the version of go installed in in the PATH (/opt/homebrew/bin) is 1.22.5, but as far as I understand (and as the output of go version seem to confirm), it should use the 1.22.7 toolchain if that is what is requested by go.work.

hyangah commented 2 months ago

Here is a minimal repro (system go version = go1.22.6)

-- go.work --
go 1.22.7

use (
        ./w1
        ./w2
)

-- w1/go.mod --
module w1

go 1.22.6

-- w2/go.mod --
module w2

go 1.22.6

[Info  - 12:49:12 PM] 2024/09/17 12:49:12 Created View (#1)
    directory=/Users/hakim/x
    view_type="GoWork"
    root_dir="file:///Users/hakim/x"
    go_version="go version go1.22.7 darwin/amd64"
    build_flags=[]
    env={GOOS:darwin GOARCH:amd64 GOCACHE:/Users/hakim/Library/Caches/go-build GOMODCACHE:/Users/hakim/go/pkg/mod GOPATH:/Users/hakim/go GOPRIVATE: GOFLAGS: GO111MODULE: GOTOOLCHAIN:auto GoVersion:22 GoVersionOutput:go version go1.22.7 darwin/amd64
 ExplicitGOWORK: EffectiveGOPACKAGESDRIVER:}
    env_overlay=[]

[Info  - 12:49:12 PM] 2024/09/17 12:49:12 16.579128ms for GOROOT= GOPATH=/Users/hakim/go GO111MODULE=auto GOPROXY=https://proxy.golang.org,direct PWD=/Users/hakim/x go list -f "{{context.GOARCH}} {{context.Compiler}}" -- unsafe

[Trace - 12:49:12.617 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2024/09/17 12:49:12 15.750208ms for GOROOT= GOPATH=/Users/hakim/go GO111MODULE=auto GOPROXY=https://proxy.golang.org,direct PWD=/Users/hakim/x go list -e -json=Name,ImportPath,Error,Dir,GoFiles,IgnoredGoFiles,IgnoredOtherFiles,CFiles,CgoFiles,CXXFiles,MFiles,HFiles,FFiles,SFiles,SwigFiles,SwigCXXFiles,SysoFiles,TestGoFiles,XTestGoFiles,CompiledGoFiles,Export,DepOnly,Imports,ImportMap,TestImports,XTestImports,ForTest,DepsErrors,Module,EmbedFiles -compiled=true -test=true -export=false -deps=true -find=false -pgo=off -- /Users/hakim/x/w1/... /Users/hakim/x/w2/... builtin\n"}

[Trace - 12:49:12.617 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2024/09/17 12:49:12 go/packages.Load golang/vscode-go#1: err: exit status 1: stderr: go: go.work requires go \u003e= 1.22.7 (running go 1.22.6)\n\n\tview_id=\"1\"\n\tsnapshot=0\n\tdirectory=/Users/hakim/x\n\tquery=[/Users/hakim/x/w1/... /Users/hakim/x/w2/... builtin]\n\tpackages=0\n\tduration=30.288576ms\n"}

I enabled verbose logging, but nothing obvious in the log. I tried to run the shown go list commands and they seem to work(?) without errors.

findleyr commented 1 month ago

Thanks for this issue. This sounds like a gopls bug, so I'll transfer to the next gopls milestone.