涉及到Go程序的启动/加载过程。
执行main.main()之前,Go引导程序会先对整个程序的包进行初始化。
整个执行流程大致为:
Go包的初始化特点:
- 包初始化程序从main()引用的包开始,逐级查找包的引用,直到找到没有引用其他包的包,最终生成一个包引用的有向无环图。
- Go编译器会将有向无环图转换为一颗树,然后从树的叶子节点开始逐层向上对包进行初始化。
- 单个包的初始化流程如上图所示,先初始化常量、然后是全局变量、最后才是执行包的init()【如果写了init()】
涉及到Go程序的启动/加载过程。
执行main.main()之前,Go引导程序会先对整个程序的包进行初始化。