VSCode:无法导入 Golang 包



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

无法导入 github.com/gomodule/redigo/redis(导入路径 github.com/gomodule/redigo/redis 没有包数据)

这是我的VSCode settings.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 env var 设置为 on,这是go env的输出

set GOARCH=amd64
set GOBIN=C:UsersFrancescoGobin
set GOCACHE=C:UsersFrancescoAppDataLocalgo-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:UsersFrancescoGo
set GOPROXY=
set GORACE=
set GOROOT=c:go
set GOTMPDIR=
set GOTOOLDIR=c:gopkgtoolwindows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:UsersFrancescoGosrctestgo.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:UsersFRANCE~1AppDataLocalTempgo-build928398422=/tmp/go-build -gno-record-gcc-switches

我应该更改什么才能完成这项工作?

这发生在我身上的一些特定情况下。这是我的故障排除过程:

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

  2. 有时,当我在与我的项目不同的根中打开编辑器时,我会遇到类似的问题。(另请查看答案末尾的更新)

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

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

  3. 重新启动编辑器

针对问题"2"的用户的更新:

Go 1.18 有一个名为工作区的新功能! 如果您在与 go mod 文件所在的根目录不同的根目录中打开工作区,可能是因为同一文件夹中有多个项目。如果是这种情况,您可以运行:

go work init
go work use ./path-to-module  ./path-to-module2

它看起来像:

.  <- editor open here
| go.work
| app (folder)
| go.mod
| go.sum
| main.go
| client (folder)
| go.mod
| go.sum
| main.go

我在使用不同的软件包(在 Mac 上)时遇到了同样的问题,

  1. 更新 go 工具 -ctrl+shift+pcmd+shift+p和更新/安装 Go 工具
  2. 重新启动VS代码

问题已解决

我遇到了类似的问题,但情况略有不同。 我在VSCode远程中遇到了这个问题,甚至无法导入像net/http这样的基本库。 我发现这是因为同一包下的其他文件中存在一些语法错误,例如undefined variables. 当我解决这些语法错误并重新启动 VSCode 时,我发现问题已解决。

go mod init package_name后跟go mod tidy让我工作。go mod tidy安装了软件包并更新了 mod 文件。

完全重新启动 vsCode 为我解决了这个问题。

注意cmd+shift+p->Developer: Reload Window没有修复它,只是完全关闭并重新打开 VS 代码

这对我有用:

  1. 文件/新窗口
  2. 文件/将文件夹添加到工作区...

当我在一个包中有两个具有不同包名称的文件时,我遇到了这个问题。例如:一个文件package main,而另一个文件package app

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

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

sudo dnf remove gcc-go

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

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

如果你使用的是Go 1.18+,这里有一个多模块工作区的新功能, 在根项目文件夹中设置 go.work 文件后,问题将不再存在,您可以查看以下链接以获取更多详细信息

  1. https://stackoverflow.com/a/59485684/7706503
  2. https://github.com/golang/tools/blob/master/gopls/doc/workspace.md

遇到了同样的问题,重新安装了goenv,然后我运行了一些go mod why来检查一切是否正常,它是

设置工作区

gopls同时支持 Go 模块和 GOPATH 模式。但是,它需要一个 定义范围,其中语言功能(如引用、重命名和 执行应该运作。

以下选项可用于配置此范围:

模块模式

一个模块

如果您使用的是单个模块,则可以打开模块根目录 (包含go.mod文件的目录),其中的子目录 模块或包含该模块的父目录。

: 如果打开包含模块的父目录,则该目录必须包含该单个模块。否则,您将使用多个模块。

多个模块

Gopls有几种用于处理多个模块的替代方案 同时,如下所述。从 Go 1.18 开始,Go 工作区 是首选解决方案。

Go

工作区 (Go 1.18+)

从 Go 1.18 开始,go命令具有对 多模块工作区,通过go.work文件。这些文件是 从gopls@v0.8.0开始被 GOPLS 认可。

在 Go 1.18 及更高版本中处理多个模块的最简单方法是 因此,创建一个包含所需模块的go.work文件 以继续工作,并将工作区根目录设置为包含以下内容的目录go.work文件。

例如,假设此存储库已签出到$WORK/tools目录。我们可以在golang.org/x/tools和 通过创建go.work同时golang.org/x/tools/gopls文件:

cd $WORK
go work init
go work use tools tools/gopls

。然后在我们的编辑器中打开$WORK目录。


我的问题是我在VSCode中打开了根文件夹(我的父文件夹),它是我的Go项目文件夹的父

文件夹即,

My Parent folder
My Go Project folder

与其打开父文件夹(我的父文件夹),不如打开项目文件夹(My Go 项目文件夹)

就我而言,我需要访问两个文件夹中的文件,因此我按照此处将父文件夹和子文件夹添加到VSCode工作区,这消除了错误

我也有同样的症状。就我而言,根本原因是缺少"CGO_ENABLED=1"。因为我在包中有一些"C"代码。

如果这是您从 Github 拉取的存储库,并且您遇到package/s could not be imported错误并在存储库中go.mod,我执行以下操作来修复:

  1. 打开终端并导航到go.modgo.sum所在的项目根目录并运行:
go mod download

其中作为go帮助菜单概述了该命令:downloads modules to local cache

  1. 内部 VS Code 使用适用于体系结构的任何命令打开命令面板。对于 mac 上的我的命令,我使用control + shift + p并搜索Go: Install/Update tools.按回车键并更新您的 Go 工具。

之后,我的main.go更新了我缺少的包,而没有明确运行go install thingVSCodeSaidIWasMissing

最新更新