文章目录
go func init()
init()函数会在包被初始化后自动执行,并且在main()函数之前执行,但是需要注意的是init()以及main()函数都是无法被显式调用的。
那么init()是不是最先执行的呢? 答案是否定的,首先,在他之前会进行全局变量的初始化;如下代码:
package main
import (
"fmt"
"chapter02/utils"
)
var variate int = 3
func init(){
fmt.Println("main init3....")
}
func init(){
fmt.Printf("main全局变量初始化:%d\n",variate)
fmt.Println("main init.....")
}
func init(){
fmt.Println("main init2....")
}
func main(){
fmt.Println("main main.....")
utils.Print()
}
utils.go
package utils
import "fmt"
var A int = 3
func init(){
fmt.Println("utils A: ",A)
fmt.Println("utils init....")
}
func init(){
fmt.Println("utils init2....")
}
func Print(){
fmt.Println("utils print....")
}
输出如下:
utils A: 3
utils init....
utils init2....
main init3....
main全局变量初始化:3
main init.....
main init2....
main main.....
utils print....
当我们导入其他包时,会先初始化导入的包,而初始化包时,会先加载全局变量,而后从上到下加载init()函数,当被导入的包的init()函数执行完毕后,执行调用方的全局变量加载,init()函数的顺序加载,之后执行main()函数。