4

我在一个目录中有两个 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")
}

使用终端命令单独运行文件时

去运行 mains.go
去运行 vars.go

我得到了输出。当我使用VScode时,我收到以下错误


main在 ./mains.go:5:6 之前的声明中在此块中重新声明

由于这个错误,我无法运行代码。当每个文件被分成文件夹时,代码运行良好。我试图在保存之前从文件中删除主要声明,但自动完成/自动格式化功能会自动填充包 main导入“fmt”命令。我的疑问是:

  • 这是编辑器的问题吗?(因为终端命令运行良好)

  • 还有其他推荐的 IDE 吗?

我的规格

Ubuntu:16.04
Visual Studio 代码:1.23.1
去版本:1.9.2

4

2 回答 2

2

在同一个包中重新声明两次 main 函数是没有意义的。您提到代码可以很好地将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()函数而无需同时执行此操作。

于 2018-06-01T08:48:12.913 回答
1

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

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

例如:

- 程序根目录
   -- main.go - 主包(在这里定义主函数)
   -- vars.go - package main (你不能在这个文件中重新定义 main func 或 package,因为目录下的所有东西都属于 golang 中的同一个包)

   - 库目录
   -- lib.go - 包库
   -- something.go - 包库  

希望有帮助!

于 2018-05-31T13:27:07.537 回答