请帮助我了解为什么“包主”中重复的“功能主”是错误的。 VC中出现错误:“在此块中重新声明了main”。
// $ tree
// .
// ├── main.go
// ├── second.go
// ```go build main.go```
// or
// ```go build .```
// file: main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("this is file MAIN")
}
// file: second.go
package main
import (
"fmt"
)
func main() {
fmt.Println("this is file SECOND")
}
我可以构建/运行它: 去构建/运行main.go-正确 去构建/运行。 -错误
答案 0 :(得分:6)
在同一包中,不能在包级别两次声明相同的符号。
并且如果您在同一文件夹中有2个文件,两个文件都具有package main
声明,那正是您的工作。这就是您的IDE抱怨的原因:它试图将这2个文件作为一个包构建/编译,就像编写go build .
一样:这将在当前文件夹中指定该包,包括所有源文件。
go run main.go
和go run second.go
之所以有效,是因为您指定要构建的 files (更具体地说是单个文件),而不是打包文件。而且,只有一个main.go
或second.go
作为main
软件包不会违反上述规则:每个文件仅包含一次main()
函数。
简而言之:go run main.go
忽略 second.go
。
通常,如果要在同一项目中创建具有多个main()
功能的多个应用,最简单的做法是将不同的main()
功能放置在不同的文件夹中,通常放在cmd
文件夹中。
Compile packages and dependencies
用法:
go build [-o output] [-i] [build flags] [packages]
Build编译由导入路径命名的软件包及其依赖关系,但不会安装结果。
如果要构建的参数是.go文件列表,则build会将其视为指定单个程序包的源文件列表。
Compile and run Go program
用法:
go run [build flags] [-exec xprog] package [arguments...]
Run编译并运行命名的主Go软件包。 通常,该软件包被指定为.go源文件的列表,但也可以是导入路径,文件系统路径或与单个已知软件包匹配的模式,如“ go run”。或“运行我的/ cmd”。