无法运行多个go文件

时间:2018-05-31 12:58:58

标签: visual-studio go vs-community-edition

我在目录中有两个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
  去运行vars.go

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

  

主要重新宣布在此区块中     先前的声明是在./mains.go:5:6

由于此错误,我无法运行代码。当每个文件分成文件夹时,代码运行正常。我尝试在保存之前从文件中删除主声明,但自动完成/自动格式功能填充 包主 & 自动导入“fmt” 命令。我的怀疑是:

  • 这是编辑器的问题吗? (当终端命令运行时 细)

  • 推荐使用其他IDE吗?

  

我的规格

     

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

2 个答案:

答案 0 :(得分:1)

您是否在同一目录中的两个不同文件中声明了两个主要功能?如果是的话,你不能,因为你只能为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  

希望有所帮助!

答案 1 :(得分:1)

在同一个包中重新声明主要功能两次是没有意义的。您提到代码可以正常工作,将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()函数,而不会同时执行此操作。