- 最权威的解释来自官方spec: Program initialization and execution
- 简单解释可参考effective go: initialization
目前理解——
- 安装程序入口进行初始化:按文件代码组织顺序,初始化所有引入的、自定义的文件中的初始化过程(这意味这当前程序用不到的代码不会被初始化——例如过程包括多个main包,每个主程序依赖不同的代码文件)
- 初始化变量声明:常量,变量(根据声明的顺序;但如果变量依赖另外的变量,则先计算依赖的变量内容,而且如果依赖的变量来自多变量声明,则此多变量也会被优先初始化)如果有循环依赖的变量声明,则程序无效
- 执行源码文件中定义的无参数的
init()
方法:可以包含多个的init()
方法(不同的文件);一个文件中也可以包含多个init()
方法;各个init方法的执行顺序不确保有序,所以应当让各个方法做独立的逻辑 - 进入主程序
main
方法的逻辑
网友评论