软件包 “main” 和 func “main”

Package "main" and func "main"

提问人:mnemotronic 提问时间:2/20/2017 最后编辑:Jonathan Hallmnemotronic 更新时间:1/16/2019 访问量:28587

问:

我看到并尝试过的介绍/示例 go progs 从

package main

并有

func main()

封装行中的“main”和函数行中的“main”之间有什么关系吗?我猜不是。 C/C++使用相同的“主”入口点。只是想确定一下。我还没有看到任何文档说使用“main”只是巧合。

评论

4赞 hobbs 2/20/2017
当然,这不是巧合,它们都是有充分理由的。

答:

53赞 Cerise Limón 2/20/2017 #1

应用程序的入口点是包中的函数,如规范中所述mainmain

一个完整的程序是通过将一个未导入的包(称为主包)与它导入的所有(传递地)链接起来创建的。主包必须具有包名称,并声明一个不带参数且不返回值的函数。mainmain

func main() { … }

程序执行首先初始化主包,然后调用函数 。当该函数调用返回时,程序将退出。它不会等待其他(非主要)goroutines完成。main

语言规范在此上下文之外不会为名称赋予特殊含义。该名称不是保留名称。mainmain

可以在非主包中声明函数。在这种情况下,它只是一个名为 .mainmain

评论

2赞 Jeff 6/6/2018
但是,在除 main 之外的某个包中的文件中的 func main() 呢?
0赞 Cerise Limón 6/6/2018
@Jeff 如果包不是 ,则该函数不是应用程序入口点。它只是一个名为 .mainmain
1赞 Jeff 6/6/2018
好的,在主包之外命名函数 main() 是不寻常的做法,还是表示意图?当然,在我所看到的情况下,代码以某种方式内置到可以从命令行调用的东西中。
1赞 Wildcard 1/16/2019
这似乎是单独问的(stackoverflow.com/q/50706238/5419599),但仍然不清楚这是一个坏主意、反模式还是没人关心的事情。