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....
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/17281413.html