随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

defer 和 init()函数

前言:

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....

 

posted @ 2023-04-02 21:18  yangphp  阅读(31)  评论(0编辑  收藏  举报