gpt4 book ai didi

go - "func main"中的重复 "package main"是否错误,为什么错误?

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:59 28 4
gpt4 key购买 nike

请帮助我理解为什么“package main”中重复的“func main”是错误的。 VC 中的错误:“main 在此 block 中重新声明”。


// $ 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")
}

我可以构建/运行这个:go build/run main.go - 正确去构建/运行。 - 错误

最佳答案

您不能在同一个包中的包级别声明两次相同的符号。

如果您在同一个文件夹中有 2 个文件,都具有 package main 声明,这正是您正在做的。这就是您的 IDE 提示的原因:它尝试将这 2 个文件构建/编译为一个包,与编写 go build 相同。:这指定了当前文件夹中的包,包括所有源文件。

go run main.gogo run second.go 之所以有效,是因为您指定了 files 来构建(更具体地说是单个文件),不是包裹。并且将单个 main.gosecond.go 作为 main 包并不违反上述规则:每个文件仅包含 main() 函数一次。

简而言之:go run main.go ignores second.go

通常如果你想在同一个项目中创建多个具有多个 main() 函数的应用程序,最简单的方法是将不同的 main() 函数放在不同的文件夹中,通常在 cmd 文件夹中。

See Command Go:

Compile packages and dependencies

Usage:

go build [-o output] [-i] [build flags] [packages]

Build compiles the packages named by the import paths, along with their dependencies, but it does not install the results.

If the arguments to build are a list of .go files, build treats them as a list of source files specifying a single package.

Compile and run Go program

Usage:

go run [build flags] [-exec xprog] package [arguments...]

Run compiles and runs the named main Go package. Typically the package is specified as a list of .go source files, but it may also be an import path, file system path, or pattern matching a single known package, as in 'go run .' or 'go run my/cmd'.

另见 What does go build build?

关于go - "func main"中的重复 "package main"是否错误,为什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55684090/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com