我在目录中有两个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
答案 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.go
和vars.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()
函数,而不会同时执行此操作。