33

我在 MacOS 上的 Visual Studio Code 中安装了 Go 扩展(版本 0.11.4):

在此处输入图像描述

但是,我发现 linter 不会“拾取”在同一包中定义的函数,而是在不同的文件中。例如,如果我在同一目录中创建一个foo.go文件

package foobar

import "fmt"

func main() {
    fmt.Println(SayHello())
}

bar.go和一个文件

package foobar

func SayHello() string {
    return "Hello, world!"
}

然后在foo.go我得到一个 linter 错误,它SayHelloundeclared name

在此处输入图像描述

我在这里(https://github.com/golang/lint/issues/57)读到了一个类似的问题,但是由于这个问题已经存在五年了,我认为它现在可能已经解决了吗?或者golint根本不能跨多个文件工作?

4

10 回答 10

51

[原始答案已过时;vscode-go这是维护者提供的最新信息。更新的答案现在在 Go 集体中标记为“推荐”]

自 2019 年以来,该插件发生了很大变化。

  • 2021 年,Go Modules 成为默认设置,这可能改变了程序的构建和分析方式。
  • vscode-go 插件gopls默认用作语言服务器。请注意,在 2019 年,有两个不同的语言服务器,gopls仍处于实验模式。
  • golint已弃用。

如果您仍然有类似的问题,则很可能您遇到了不同的问题。

请检查以下内容:

如果您注意到重新启动语言服务器(“Go:重新启动语言服务器”命令)可以解决您的问题,那就是 gopls 错误。请考虑按照故障排除指南在 github.com/golang/vscode-go 中提交问题。

否则,请打开一个包含详细信息的新问题。

----- 原始答案 -----

我遇到了同样的问题。我发现在启用“Go语言服务器”后遇到了这个问题,这是一个实验性功能。我在 VS code settings->Go Configuration 中禁用了它,然后问题就消失了。

于 2019-12-26T08:16:51.390 回答
44

更新 VS Code Go Tool 可能会有所帮助。 Command + Shift + P->Go: Install/update tools 安装所有工具并重新启动 VS Code。

于 2019-09-20T05:03:40.020 回答
26

对我来说这个警告的原因是设置go.lintOnSave,它被设置为file。更改值以package使 linter 正确选择其他文件中定义的类型。

于 2021-04-30T14:15:42.283 回答
11

对于最终来到这里的人:

自 2019 年以来,该插件发生了很大变化。

  • 2021 年,Go Module 成为默认设置,这可能改变了程序的构建和分析方式。
  • vscode-go 插件gopls默认用作语言服务器。请注意,在 2019 年,有两个不同的语言服务器,gopls仍处于实验模式。
  • golint已弃用。

如果您仍然有类似的问题,则很可能您遇到了不同的问题。

请检查以下内容:

如果您注意到重新启动语言服务器(“Go:重新启动语言服务器”命令)可以解决您的问题,那就是 gopls 错误。请考虑按照故障排除指南在 github.com/golang/vscode-go 中提交问题。

否则,请打开一个包含详细信息的新问题。

于 2021-10-13T12:43:26.847 回答
4
  1. 更新 GO 的安装/更新工具
  2. 在 VS Code 中将您的代码作为主项目打开,并避免在同一个 VS Code 中使用多个项目/工作区。**

单个项目 VS 代码

** 单个项目 VS 代码

**

避免 VS Code 中的多个项目

**

避免 VS Code 中的多个项目

于 2021-10-29T08:59:16.413 回答
3

如果您遇到此问题并且未使用模块,则添加 "go.useLanguageServer": false 将禁用 gopls 并将您返回到以前的环境。(意味着 vscode 现在可以识别同一个包中多个文件中定义的函数和结构)

于 2021-02-08T07:39:51.827 回答
2

就我而言,这是一个丢失的go.mod文件。我使用以下命令进行了修复:

go mod init example.com/myProject/myModule

当然你应该使用更合理的模块名称。

于 2021-10-12T12:41:27.533 回答
0

在几乎把我的头发拉出来之后,我发现 linting 正在工作,但我有很多文件有错误。我还没有找到遵循的层次结构,但是在一个文件中修复问题随后导致它正确地对另一个文件进行了 linting。我认为它遵循执行树,尽管我没有验证这一点。我发现这很烦人,因为它可能会错误地导致您认为 linting 不起作用,而实际上,它正在为您当前不关注的文件添加内容,特别是如果您生成了您不感兴趣的文件。

于 2020-09-07T16:54:48.953 回答
0

彻底卸载vscode,然后再次正常工作...

如果需要,请添加 sudo

rm -rf $HOME/Library/Application\ Support/Code

rm -rf $HOME/.vscode

从应用程序中删除 vscode

下载vscode重新安装

于 2019-09-20T13:23:44.860 回答
0

另一种解决方案可能是您需要在 VS Code 中打开包含 go.mod 文件的文件夹。所以你可能有一个看起来像workspace/application/modules/xyz.go的文件夹结构。如果您在应用程序文件夹中有 go.mod 文件,并且 modules 是您在 VS Code 中打开的文件夹,它会抱怨。

于 2021-08-25T19:47:47.610 回答