init函数是go中特殊的函数,用来做包的初始化,每个文件中都可以包含多个init函数,将在包初始化时顺序调用。
    这样的init初始化函数除了不能被调用或引用外,其他行为和普通函数类似。在每个文件中的init初始化函数,在程序开始执行时按照它们声明的顺序被自动调用。
    每个包在解决依赖的前提下,以导入声明的顺序初始化,每个包只会被初始化一次。因此,如果一个p包导入了q包,那么在p包初始化的时候可以认为q包必然已经初始化过了。初始化工作是自下而上进行的,main包最后被初始化。以这种方式,可以确保在main函数执行之前,所有依赖的包都已经完成初始化工作了。

    1. package main
    2. import "fmt"
    3. var t [10]int
    4. func init() {
    5. for i, _ := range t {
    6. t[i] = i
    7. }
    8. }
    9. func init() {
    10. for i, _ := range t {
    11. if i%2 == 0 {
    12. t[i] = i * 2
    13. }
    14. }
    15. }
    16. func main() {
    17. fmt.Println(t)
    18. }
    19. // [0 1 4 3 8 5 12 7 16 9]