init

I、init的几个特征

initpackage xxxmain
initinit
initinit
initmain

II、例程

2.1 在main函数之前执行init
//test1
package main 

import "fmt"

func main() {
    fmt.Println("do in main")
}


func init() {
    fmt.Println("do in init1")
}

func init() {
    fmt.Println("do in init2")
}  

运行结果:

initmaininit
2.2 init函数的执行顺序

现在我们init目录下的文件内容如下:

三个go程序代码分别如下所示:

// test.go
package main  

import (
    "fmt"
    _ "./level1"
)

func main() {
    fmt.Println("I am in main")
}  
// level1.go
package level1  

import (
    "fmt"
    _ "../level2"
)

func init() {
    fmt.Println("I am in level1")
}  
// level2.go  
package level2 

import "fmt"  

func init() {
    fmt.Println("I am in level2")
}  
test.go
init

并且这种关系为:

import _ " "
import _ " "import _ " "

【参考】

[1] 《The way to go》