题目序号: 822
题目来源:高德
频次:1
答案1:(peace)
init函数的主要作用: 1)初始化不能采用初始化表达式初始化的变量。 2)程序运行前的注册。 3)实现sync.Once功能。 4)其他
init函数的主要特点: 1)init函数先于main函数自动执行,不能被其他函数调用; 2)init函数没有输入参数、返回值; 3)每个包可以有多个init函数; 4)包的每个源文件也可以有多个init函数,这点比较特殊; 5)同一个包的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序。 6)不同包的init函数按照包导入的依赖关系决定执行顺序。
golang程序初始化 golang程序初始化先于main函数执行,由runtime进行初始化,初始化顺序如下: 1)初始化导入的包(包的初始化顺序并不是按导入顺序(“从上到下”)执行的,runtime需要解析包依赖关系,没有依赖的包最先初始化,与变量初始化依赖关系类似,参见golang变量的初始化); 2)初始化包作用域的变量(该作用域的变量的初始化也并非按照“从上到下、从左到右”的顺序,runtime解析变量依赖关系,没有依赖的变量最先初始化,参见golang变量的初始化); 3)执行包的init函数;
故,最终初始化顺序:变量初始化 -> init() -> main()