Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在VS代码中执行linter不适用于跨多个文件的包?_Go_Visual Studio Code_Golint - Fatal编程技术网

Go 在VS代码中执行linter不适用于跨多个文件的包?

Go 在VS代码中执行linter不适用于跨多个文件的包?,go,visual-studio-code,golint,Go,Visual Studio Code,Golint,我已在MacOS上的Visual Studio代码中安装了Go扩展(版本0.11.4): 但是,我发现linter并不是在同一个包中定义的“拾取”函数,而是在不同的文件中定义的。例如,如果我在同一个目录中创建一个文件foo.gowith package foobar import "fmt" func main() { fmt.Println(SayHello()) } package foobar func SayHello() string { return "He

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

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

package foobar

import "fmt"

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

func SayHello() string {
    return "Hello, world!"
}
和一个文件
bar.go
with

package foobar

import "fmt"

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

func SayHello() string {
    return "Hello, world!"
}
然后在
foo.go
中,我得到一个linter错误,
SayHello
是一个
未声明的名称


我在这里读到过一个类似的问题(),但由于这个问题已经存在五年了,我想现在可能已经解决了?还是说,
golint
不能跨多个文件工作?

更新VS代码Go工具可能会有所帮助。
Command+Shift+P
->
Go:Install/updatetools

安装所有工具并重新启动VS代码。

彻底卸载VS代码,然后再次正常工作

如果需要添加sudo

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

rm -rf $HOME/.vscode
从应用程序中删除vscode


下载vscode并重新安装

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

在我几乎把头发拔出来之后,我发现linting正在工作,但我有很多文件有错误。我还没有找到遵循的层次结构,但修复了一个文件中的问题之后,它就正确地对另一个文件进行了lint。我认为它遵循执行树,尽管我还没有对此进行验证。
我觉得这很烦人,因为它会错误地让你认为linting不起作用,而事实上,它是在一个你目前没有关注的文件中排列,特别是如果你生成了你不感兴趣的文件。

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

对我来说,出现此警告的原因是设置了
go.lintOnSave
,设置为
file
。将值更改为
package
可使linter正确拾取其他文件中定义的类型。

BTW,这不是linter错误,而是编译错误。您使用的是哪种lint工具<代码>戈林特,
戈朗奇林特
,其他?检查设置
go.lintTool
,然后尝试从命令行运行linter。您是如何解决此问题的?这也是我的问题!如果我们正在使用模块呢?解决了我的问题(y)