面试题答案
一键面试-
正常执行时defer语句的执行顺序:
- 当
main
函数调用func1
时,func1
中的defer
语句入栈,此时栈中有defer in func1
。 - 接着
func1
调用func2
,func2
中的defer
语句入栈,此时栈中从栈顶到栈底为defer in func2
,defer in func1
。 - 然后
func2
调用func3
,func3
中的defer
语句入栈,此时栈中从栈顶到栈底为defer in func3
,defer in func2
,defer in func1
。 func3
执行完毕,defer in func3
出栈并执行,打印defer in func3
。func2
执行完毕,defer in func2
出栈并执行,打印defer in func2
。func1
执行完毕,defer in func1
出栈并执行,打印defer in func1
。
- 当
-
如果func2函数中出现了panic时defer语句的执行情况:
- 当
main
函数调用func1
时,func1
中的defer
语句入栈,此时栈中有defer in func1
。 - 接着
func1
调用func2
,func2
中的defer
语句入栈,此时栈中从栈顶到栈底为defer in func2
,defer in func1
。 - 当
func2
中出现panic
时,func2
中剩余的代码不再执行,func2
中的defer
语句出栈并执行,打印defer in func2
。 - 然后控制权会返回到
func1
,func1
中的defer
语句出栈并执行,打印defer in func1
。 - 由于
panic
没有被捕获,程序会终止并输出panic
信息。
- 当