VSCode: 无法导入 Golang 包

VSCode: Could not import Golang package

我正在我的 GoPath 中编写一个 Go 项目,我正在使用 Redigo 包连接到 Redis 服务器。应用程序运行良好,但是在 VSCode 中,包导入时出现这个烦人的错误,这会阻止 VSCode 提供智能建议

Could not import github.com/gomodule/redigo/redis (no package data for import path github.com/gomodule/redigo/redis)

这是我的VSCodesettings.json

{
    "editor.fontSize": 14,
    "editor.formatOnPaste": true,
    "editor.multiCursorModifier": "ctrlCmd",
    "editor.snippetSuggestions": "top",
    "extensions.ignoreRecommendations": false,
    "workbench.statusBar.visible": true,
    "workbench.iconTheme": "vscode-great-icons",
    "files.autoSave": "afterDelay",
    "go.useLanguageServer": true,
    "go.alternateTools": {
        "go-langserver": "bingo"
    },
    "go.toolsEnvVars": {
        "GO111MODULE": "on"
    },
    "go.languageServerExperimentalFeatures": {
        "autoComplete": true,
        "documentSymbols": true,
        "findReferences": true,
        "format": true,
        "goToDefinition": true,
        "goToTypeDefinition": true,
        "hover": true,
        "signatureHelp": true,
        "rename": true,
        "workspaceSymbols": true,
    },
    "go.lintTool": "golangci-lint",
    "go.lintFlags": [
        "--fast",
        "-E", "goimports",
        "-E", "gocritic",
        "-E", "gocyclo",
        "-E", "gosec",
        "-E", "maligned",
        "-E", "scopelint",
        "-E", "interfacer",
        "-E", "goconst",
        "-E", "unconvert",
        "-E", "unparam",
        "-E", "prealloc",
        "-E", "varcheck",
    ],
    "go.formatTool": "goimports",
    "editor.minimap.enabled": false,
    "breadcrumbs.enabled": false,
    "git.autofetch": true,
    "workbench.startupEditor": "newUntitledFile",
    "explorer.confirmDelete": false,
    "git.enableSmartCommit": true,
    "git.confirmSync": false,
    "window.zoomLevel": 0,
    "explorer.confirmDragAndDrop": false
}

我已经将 GO111MODULE 环境变量设置为打开,这是 go env

的输出
set GOARCH=amd64
set GOBIN=C:\Users\Francesco\Go\bin
set GOCACHE=C:\Users\Francesco\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\Francesco\Go
set GOPROXY=
set GORACE=
set GOROOT=c:\go
set GOTMPDIR=
set GOTOOLDIR=c:\go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\Francesco\Go\src\test\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\FRANCE~1\AppData\Local\Temp\go-build928398422=/tmp/go-build -gno-record-gcc-switches

我应该更改什么才能使其正常工作?

在一些特定情况下,我会遇到这种情况。这是我的故障排除过程:

  1. 你运行go get github.com/gomodule/redigo/redis了吗?

  2. 有时,当我在与我的项目不同的根目录中打开我的编辑器时,我会遇到类似的问题。

.  <- editor open here
| 
|_Folder
  | main.go
  1. 确保您的工具是最新的:运行 ctrl + shift + p,输入 Go 并选择Install/Update tools.

  2. 尝试将您的项目移出 GOPATH,并为其设置 go.mod。

  3. 重启编辑器

我遇到了类似的问题,但情况略有不同。 我在VSCode远程遇到了这个问题,连net/http这样的基础库都导入不了。 我发现是因为同一个包下的其他文件有些语法错误,比如undefined variables。 当我解决了这些语法错误并重新启动VSCode后,我发现问题已经解决了

当我在一个包中有两个包名称不同的文件时,我 运行 陷入了这个问题。例如:一个文件有 package main 而另一个文件有 package app.

确保所有文件具有相同的包名称将导致跨包的导入再次开始工作。

我在另一个包上遇到了同样的问题(在 mac),

  1. 更新 go 工具 - ctrl + shift + pcmd + shift + p 和 update/install go tools
  2. 重启VScode

问题已解决

我最近 运行 遇到了同样的错误,我的解决方案是确保我的项目 mod 文件的 go 版本与我系统上安装的版本相同。

go mod init package_name 后跟 go mod tidy 让事情对我有用。 go mod tidy 安装了软件包并更新了 mod 文件。

我遇到了同样的问题,它来自 go mod init packegeName,我的包名为 'time',编辑器给我错误,所以我只是用 'timee' 替换它,我不知道是什么实际上发生了,但它工作正常

目录名中可能存在无效字符。

我已经在 Fedora 35 上安装了 gcc-go,卸载后一切正常。

sudo dnf remove gcc-go