每个 package 中每个 init() 函数都会被调用,且顺序固定

  1. 对同一个 go 文件的 init() 调用顺序是从上到下的
  2. 对同一个 package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的 init() 函数,对于
  3. 对不同的 package,如果不相互依赖的话,按照 main 包中"先 import 的后调用"的顺序调用其包中的 init()
  4. 如果 package 存在依赖,则先调用最早被依赖的 package 中的 init()