不能 运行 多个 go 文件

Cannot run multiple go files

我在一个目录下有两个go文件。

  Go  
   ├── mains.go  
   └── vars.go

mains.go 和 vars.go 的代码如下:

mains.go
--------
package main

import "fmt"

func main() {
     fmt.Println("This is the mains file")
}


vars.go
--------
package main

import "fmt"

func main() {
     fmt.Println("This is the vars file")
}

虽然 运行使用终端命令单独地打开文件

go run mains.go
go run vars.go

我正在获取输出。当我使用 VScode 时,出现以下错误

main redeclared in this block
previous declaration at ./mains.go:5:6

由于这个错误,我无法 运行 代码。当每个文件被分成文件夹时,代码 运行 没问题。我试图在保存之前从文件中删除主声明,但是 autocomplete/autoformat 功能填充了 package main & 自动导入"fmt"命令。我的疑问是:

My specs

Ubuntu : 16.04
Visual Studio Code : 1.23.1
go version : 1.9.2

您是否在同一目录下的两个不同文件中声明了两个主要函数?如果是,则不能,因为 go 程序只能有一个入口点。

Golang 还建议每个目录有一个包。您可以在同一个包中包含多个文件。

例如:

- Root directory of program
   -- main.go - package main (define main func here) 
   -- vars.go - package main (You can not redefine main func or package in this file, since everything under directory falls in to same package in golang)

   - lib directory
   -- lib.go - package lib
   -- something.go - package lib  

希望对您有所帮助!

在同一个包中两次重新声明主函数没有意义。您提到代码可以很好地将 mains.govars.go 文件放在不同的文件夹中。这是预料之中的,也是需要做的 - 将文件放在不同的文件夹中

但是,如果您需要 运行 这两个函数,请使用如下定义的简单 goroutine 更改您的设置:

// main.go
package main

import (
          "fmt"
          "sync"
)

var wg sync.WaitGroup

func main() {
     fmt.Println("This is the mains file")

     wg.Add(1)
     go vars()

     // do other stuff...
     wg.Wait()
}

// vars.go
package main

import "fmt"

func vars() {
     fmt.Println("This is the vars file")
     // do other stuff...

     wg.Done()
}

这将允许您同时 运行 这两个功能,同时仍在同一个包中。由于函数不能具有相同的函数名称:main(),您需要像我所做的那样将其中一个更改为其他名称。

但是请注意,您可以简单地调用 vars() 函数,而无需同时调用。