Go 启动应用程序时,尽管是私有的,如何从主包调用main()函数?

Go 启动应用程序时,尽管是私有的,如何从主包调用main()函数?,go,Go,在Golang中,不以大写字母开头的函数是一个私有函数,不能在包外访问,那么为什么在启动应用程序时访问main()包中的函数?调用main()是否有特殊规定?main()是一种特殊情况。“Exported”和“unexported”是编译器用来确定是否允许一个包直接引用来自不同包的标识符的标识符的质量。但是main()不像普通函数那样被调用。调用main()是Go运行时启动过程中的最后一步,其中包括启动goroutine调度程序和垃圾收集器、初始化包变量以及调用init()函数(另一种特殊情况)

在Golang中,不以大写字母开头的函数是一个私有函数,不能在包外访问,那么为什么在启动应用程序时访问
main()
包中的
函数?调用
main()
是否有特殊规定?

main()
是一种特殊情况。“Exported”和“unexported”是编译器用来确定是否允许一个包直接引用来自不同包的标识符的标识符的质量。但是
main()
不像普通函数那样被调用。调用
main()
是Go运行时启动过程中的最后一步,其中包括启动goroutine调度程序和垃圾收集器、初始化包变量以及调用
init()
函数(另一种特殊情况)等


这就是Go程序的工作方式:
main()调用
main
包的
函数。这是任何围棋项目的切入点。有关详细信息,请参阅。无法从其他包调用
main()
,规则仍然适用(但也因为无法导入包main)。
main
函数未被“调用”
main
是应用程序的入口点。主程序包和主功能都是特殊的。第一个定义应用程序/可执行程序/程序,第二个是入口点。就像在C@Marc中一样,我知道main()是应用程序的入口点。我的问题是,它是一个私有函数,从外部调用,这怎么可能呢。与Java一样,main方法是public static void main(),这就是JVM可以调用它的原因。Go编译器专门在
main
包中查找
main
函数,并将其用作入口点。它不需要遵守包导出规则,因为它根本不是同一个机制。你把事情搞混了。导出/未导出(这些是Go中的正确术语,不是公共/私有)控制“可见性”,而不是“可调用性”。未报告的内容(不仅是函数,还包括类型、变量、常量或方法)在包外是不可见的,因此它们是不可访问的,但仍然是可用的。例如,您可以拥有一个带有未报告函数
func f()
的包
strange
,以及一个已导出的
func W()func(){return f}
,它会公开您未报告的
f
。从外部调用
f
很简单:
奇怪的.W()()