init函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。init 函数通常被用来:

    • 对变量进行初始化
    • 检查/修复程序的状态
    • 注册
    • 运行一次计算

    为了使用导入的包,首先必须将其初始化。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。这通过Golang的运行时系统控制,如下图所示:

    1. 初始化导入的包(递归导入)
    2. 对包块中声明的变量进行计算和分配初始值
    3. 执行包中的init函数

    init 函数 - 图1
    即使包被导入多次,初始化只需要一次。
    init函数不需要传入参数,也不会返回任何值。与main相比而言,init没有被声明,因此也不能被引用。
    每个源文件中可以包含多个init函数。