本文视频地址
在 Go 语言中,通过包的 init 函数来完成初始化的工作。
1. init 函数
Go 语言中有两个特殊的函数:
1) main 包中的 main 函数,它是所有 Go 可执行程序的入口函数;
2) 包级别的 init 函数。
init 函数是一个无参无返回值的函数:
func init() {
...
}
如果一个包定义了 init 函数,Go 运行时会负责在该包初始化时调用它的 init 函数。我们不能显式调用 init,否则会在编译期间报错。
一个 Go 包可以拥有多个 init 函数,每个组成包的源文件中亦可以定义多个 init 函数。在初始化该包时,Go 运行时会按照一定的次序逐一顺序地调用该包的 init 函数。每个 init 函数在整个 Go 程序生命周期内仅会被执行一次。因此,init 函数可以做一些包级初始化以及包级数据初始状态的检查工作。
一般来说,先被传递给 Go 编译器的源文件中的 init 函数先被执行;同一个源文件中的多个 init 函数按声明顺序依次执行。在Go 语言中:不要依赖 init 函数的执行次序。
2. 程序初始化顺序
除了 init 函数是顺序执行并仅被执行一次之外,Go 程序初始化顺序也给 init 函数提供了前提条件。