15

VIM Syntastic 插件适用于 .go 文件。但有时我想在同一个文件夹中有几个 go 文件,每个文件都有 main() 方法,这样我就可以go run xxx每个文件(用于演示)。当我保存第二个文件(prog2.go)时,这将导致错误:

main redeclared in the block previous declaration at prog1.go

我如何告诉 Syntastic 忽略这些错误?

更新 1

像 Rob Pike 的“Go Concurrency Patterns”和 Francesc Campoy Flores 的“Twelve Go Best Practices”这样的官方 Go 演讲都将源文件放在同一个文件夹中。所以这个问题不是关于运行 go 文件的最佳实践,而是关于如何抑制或忽略这个警告。

更新 2

在我在这里提出问题后,作者清楚地回答了我的问题。这正是我所需要的。谢谢大家。

4

6 回答 6

32

你不能,因为这是一个真正的错误。

如果您.go在一个包(即package main)中有多个文件,那么您只能拥有一个main()功能。

您应该使用go build将您的应用程序构建为可执行二进制文件。go run是测试单个文件的快速“hack”,而不是完整的程序。

您的选择:

  1. 将它们放在同一个包中并使用go build.
  2. 将您的“程序”拆分为单独的包。例如$GOPATH/src/mypkg1$GOPATH/src/mypkg2
  3. 使用脚本语言。

我还建议阅读如何编写 Go 代码以了解如何管理包。

于 2014-03-04T03:46:29.240 回答
2

原因是,一个包中只能有一个 main 函数。

于 2020-05-07T01:03:31.707 回答
2

如果您使用的是 vs 代码。

请关闭。扩展去。问题解决了。

于 2021-05-31T09:04:30.453 回答
0

即使它显示错误,您也可以运行 go run 命令来测试/运行该文件

$ go run file.go
于 2018-10-12T14:04:28.270 回答
0

我正在学习 go,将许多小的“func main”文件放在同一个目录中并尝试每个文件都很方便,很想使“在这个块中重新声明的 main”保持沉默

于 2020-10-22T22:30:20.437 回答
0

如果您使用 vim-go 插件,您可以将以下内容添加到您的 .vimrc 中。

let mapleader = ","    
autocmd FileType go nmap <Leader>rs  :<C-u>GoRun %<cr>

只需点击 ,rs 即可获得结果。

于 2018-10-18T01:50:21.250 回答