1. 引言

init()
init()

2. init 函数的特点

2.1 自动执行

init()init()init()
init()main()init()main()init()

当我们运行这段代码时,输出结果如下:

Init function executed
Main function executed

init()main()init()

2.2 在包级别变量初始化后执行

init()
init()main()

Init function executed
Var1: Variable 1
Var2: Variable 2
Main function executed

init()init()init()init()

2.3 执行顺序不确定

init()init()init()
init()init()
init()

First init function
Second init function
Main function executed

init()init()
init()init()
init()init()

3. init 函数的用途

3.1 初始化全局变量

init()
init()
Configinit()
Configinit()loadConfig()loadConfig()map
init()ConfigConfig
init()

3.2 执行一些必要的验证操作

init()init()
init()loadConfig()validateConfig()
os.Exit()
init()

4. init 函数的注意事项

4.1 init 函数不能被显式调用

init()
init()main()main()init()init()
init()undefined: init

4.2 init 函数只执行一次

init()init()
init()init()
utilcounterinit()counter
package1package2util
main.gopackage1package2

运行上述程序,我们可以得到以下输出:

init() function in util package executed. Counter: 1
init() function in package1 executed. Counter: 1
init() function in package2 executed. Counter: 1
Main function

utilinit()package1package2init()init()

4.3 避免在 init 函数中执行耗时操作

init()init()init()
init()time.Sleep()main()init()main()init()
init()main()
init()

5. 总结

init()
init()initinit()init()init
init()