VS Code 中的 Go linter 不适用于跨多个文件的包?

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

http://img.mukewang.com/64c0cc7d000163b603080165.jpg

但是,我发现 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

http://img4.mukewang.com/64c0cc8700017d9204860124.jpg

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



青春有我
浏览 161回答 3
3回答

慕妹3242003

自 2019 年以来,该插件发生了很大变化。2021 年,Go 模块成为默认模块,这可能改变了程序的构建和分析方式。vscode-go 插件gopls默认用作语言服务器。请注意,2019 年有两种不同的语言服务器,且gopls仍处于实验模式。golint已被弃用。

Qyouu

更新 VS Code Go Tool 可能会有所帮助。 Command + Shift + P->Go: Install/update tools 安装所有工具并重新启动 VS Code。2022 年 5 月更新:此解决方案仅在您尚未安装helper tools. 通常,安装这些软件包后,它会立即使用default configuration。

白衣染霜花

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

侃侃无极

对于最终来到这里的人:自 2019 年以来,该插件发生了很大变化。2021 年,Go Module 成为默认模块,这可能改变了程序的构建和分析方式。vscode-go 插件gopls默认用作语言服务器。请注意,2019 年有两种不同的语言服务器,且gopls仍处于实验模式。golint已被弃用。如果您仍然遇到类似的问题,则您可能会遇到不同的问题。请检查以下内容:你有吗go.mod?否则,初始化您的工作模块并重新启动语言服务器或重新加载窗口。该go.mod文件是否位于您的工作空间的根目录中?有关复杂设置,请参阅gopls工作区设置指南。您使用构建标签或其他构建约束吗?然后参见问题 29202。您可能需要配置"go.buildTags"或"go.buildFlags"。如果您预计 lint 会出现诸如staticcheck、golangci-lint、 ... 之类的 lint 错误,请检查"go.lintOnSave"是否设置为正确的范围。如果您发现重新启动语言服务器(“Go:重新启动语言服务器”命令)可以解决您的问题,那么这是一个 gopls 错误。请考虑按照故障排除指南在 github.com/golang/vscode-go 中提交问题。否则,请提出一个包含详细信息的新问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go