init
函数的执行规则:
-
对于同一个 go 文件,
init
函数的执行顺序从上到下,即在代码中先出现的init
函数会先执行。 -
对于同一个 package,不同文件是按照文件名字符串比较的结果决定执行顺序的,字符串越小的文件越早被初始化。
-
对于不同的 package,如果不相互依赖,则按照
import
的顺序决定初始化顺序。 -
如果 package 存在依赖,则先初始化被依赖的 package。
-
每个 package 只会被初始化一次。
-
main
函数总在所有init
函数执行完后,才会执行。
这些规则确保了在 Go 程序开始执行 main
函数之前,所有的变量初始化和 init
函数都已经完成。这样可以保证在 main
函数运行时,所有的其他包都已经准备就绪。