无法运行多个go文件

ikfrs5lh  于 11个月前  发布在  Go
关注(0)|答案(3)|浏览(131)

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


使用terminal命令单独运行文件时,
去把电源打开,快去
去跑瓦尔斯,去
我正在获取输出。当我使用VScode时,我得到以下错误

  • main在此块中重新声明

上一次申报时间:./mains.go:5:6*
由于这个错误,我无法运行代码。当每个文件被分隔到文件夹时,代码运行正常。我试图在保存之前从文件中删除main声明,但自动完成/自动格式化功能会自动填充***package main***&***import“fmt”***命令。我的疑虑是:

  • 这是编辑器的问题吗?(因为终端命令运行正常)
  • 还有其他推荐的IDE吗?

我的配置

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

qyswt5oh

qyswt5oh1#

在同一个包中重新声明main函数两次是没有意义的。你提到代码可以很好地将mains.govars.go文件放在不同的文件夹中。这是预期的,这就是需要做的-placing the files in different folders
但是,如果你需要运行这两个函数,可以使用下面定义的简单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()函数,而无需并发执行。

wlwcrazw

wlwcrazw2#

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

字符串
希望能帮上忙!

lp0sw83n

lp0sw83n3#

在同一个文件夹中有多个带有func main()的go文件对于简单的代码片段(而不是生产代码!)是很方便的。
您不能在该文件夹上使用
go build
。Go将给予错误:

main在此块中重新声明

但您可以使用命令运行单个文件,

go run file.go

要在VSCode中运行单个文件,您必须向VSCode添加Launch file配置
1.按下运行三角形按钮旁边的齿轮打开'launch.json'
1.在屏幕右下方出现按钮添加配置,按下该按钮。
1.从列表中选择“{} Go:Launch file”选项。
添加的新配置为:

{
            "name": "Launch file",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${file}"
        },

字符串
1.保存发射,开始
1.要运行文件,请在“运行”三角形按钮旁边的下拉列表中选择“启动文件”。

相关问题