我正在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
我应该更改什么才能完成这项工作?
这发生在我身上的一些特定情况下。这是我的故障排除过程:
-
你跑
go get github.com/gomodule/redigo/redis
了吗? -
有时,当我在与我的项目不同的根中打开编辑器时,我会遇到类似的问题。(另请查看答案末尾的更新)
. <- editor open here
|
|_Folder
| main.go
| go.mod
| go.sum
确保您的工具是最新的:运行
ctrl
+shift
+p
,键入Go
并选择Install/Update tools
。尝试将你的项目移出GOPATH,并为其设置go.mod。
重新启动编辑器
针对问题"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 上)时遇到了同样的问题,
- 更新 go 工具 -
ctrl
+shift
+p
或cmd
+shift
+p
和更新/安装 Go 工具 - 重新启动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 代码
这对我有用:
- 文件/新窗口
- 文件/将文件夹添加到工作区...
当我在一个包中有两个具有不同包名称的文件时,我遇到了这个问题。例如:一个文件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 文件后,问题将不再存在,您可以查看以下链接以获取更多详细信息
- https://stackoverflow.com/a/59485684/7706503
- 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
,我执行以下操作来修复:
- 打开终端并导航到
go.mod
和go.sum
所在的项目根目录并运行:
go mod download
其中作为go帮助菜单概述了该命令:downloads modules to local cache
- 内部 VS Code 使用适用于体系结构的任何命令打开命令面板。对于 mac 上的我的命令,我使用
control + shift + p
并搜索Go: Install/Update tools
.按回车键并更新您的 Go 工具。
之后,我的main.go
更新了我缺少的包,而没有明确运行go install thingVSCodeSaidIWasMissing