Go-18-init

见下面的代码输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var WhatIsThe = AnswerToLife()

func AnswerToLife() int { // 1
return 42
}

func init() { // 2
WhatIsThe = 0
}

func main() { // 3
if WhatIsThe == 0 {
fmt.Println("It's all a lie.")
}
}

//It's all a lie.

Golang 中 init 的执行顺序

img

  1. 如果一个包导入了其他包,则首先初始化导入的包。
  2. 然后初始化当前包的常量。
  3. 接下来初始化当前包的变量。
  4. 最后,调用当前包的 init() 函数

参考链接

  1. https://stackoverflow.com/questions/24790175/when-is-the-init-function-run
  2. https://learnku.com/go/t/47135