go 笔记 init函数

发布时间 2023-03-24 22:15:34作者: codestacklinuxer

来自:go init函数
1、golang里的main函数是程序的入口函数,olang还有另外一个特殊的函数init函数,先于main函数执行

init函数的主要作用:
初始化不能采用初始化表达式初始化的变量。
程序运行前的注册。
实现sync.Once功能。
其他

init函数的主要特点:
init函数先于main函数自动执行,不能被其他函数调用;
init函数没有输入参数、返回值;
每个包可以有多个init函数;
包的每个源文件也可以有多个init函数,这点比较特殊;
同一个包的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序。
不同包的init函数按照包导入的依赖关系决定执行顺

golang程序初始化

golang程序初始化先于main函数执行,由runtime进行初始化,初始化顺序如下:

  • 初始化导入的包(包的初始化顺序并不是按导入顺序(“从上到下”)执行的,runtime需要解析包依赖关系,没有依赖的包最先初始化,与变量初始化依赖关系类似,参见golang变量的初始化);
  • 初始化包作用域的变量(该作用域的变量的初始化也并非按照“从上到下、从左到右”的顺序,runtime解析变量依赖关系,没有依赖的变量最先初始化,参见golang变量的初始化);
  • 执行包的init函数;

变量初始化->init()->main()