init函数是go中特殊的函数,用来做包的初始化,每个文件中都可以包含多个init函数,将在包初始化时顺序调用。
这样的init初始化函数除了不能被调用或引用外,其他行为和普通函数类似。在每个文件中的init初始化函数,在程序开始执行时按照它们声明的顺序被自动调用。
每个包在解决依赖的前提下,以导入声明的顺序初始化,每个包只会被初始化一次。因此,如果一个p包导入了q包,那么在p包初始化的时候可以认为q包必然已经初始化过了。初始化工作是自下而上进行的,main包最后被初始化。以这种方式,可以确保在main函数执行之前,所有依赖的包都已经完成初始化工作了。
package mainimport "fmt"var t [10]intfunc init() {for i, _ := range t {t[i] = i}}func init() {for i, _ := range t {if i%2 == 0 {t[i] = i * 2}}}func main() {fmt.Println(t)}// [0 1 4 3 8 5 12 7 16 9]
