defer 和 init()函数

发布时间 2023-04-02 21:22:50作者: yangphp

前言:

defer 语句会将其后面跟随的语句进行延迟处理,

return前,将延迟处理的语句按 defer 的逆序进行执行

正文:

defer 实例1

fmt.Println("hello")

defer fmt.Println("a")

defer fmt.Println("b")

defer fmt.Println("c")

fmt.Println("world")

输出结果顺序为:defer 最后执行,顺序为从后往前执行

hello

world

c

b

a

 

Init函数

init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高

init()函数中,不能传入参数,也没用返回值。初始化操作,例如连接数据库等

 

执行顺序:

1初始化导入的包(递归导入)

2对包块中声明的变量以及常量进行分配初始值

3执行包中的init函数

4、执行main函数

 

init执行顺序实例:

var test = g()  //最先执行

func init() {  //第二执行

fmt.Println("init111.....") 

}

func init() { //第三执行

fmt.Println("init222.....")

}

func g() int { 

fmt.Println("ggggg....")

return 1

}

func main() {  //第四执行

fmt.Println("main....")

}

执行结果如下:

ggggg....

init111.....

init222.....

main....