面试题答案
一键面试输出结果
3
2
1
原因及defer执行机制解释
- defer执行机制:在Go语言中,
defer
语句会将其后面跟随的函数推迟到包含该defer
语句的函数即将返回时才执行。多个defer
语句会以栈的形式压入,即先defer
的后执行,后defer
的先执行,也就是遵循后进先出(LIFO)的顺序。 - 具体执行过程:
- 当程序执行到
defer fmt.Println(1)
时,fmt.Println(1)
这个函数调用被压入到一个栈中,但并不会立即执行。 - 接着执行到
defer fmt.Println(2)
,fmt.Println(2)
这个函数调用也被压入栈中,此时栈顶为fmt.Println(2)
,栈底为fmt.Println(1)
。 - 然后执行
fmt.Println(3)
,所以控制台首先输出3
。 - 当
main
函数执行完毕准备返回时,开始执行defer
压入栈中的函数。首先执行栈顶的fmt.Println(2)
,输出2
,接着执行栈底的fmt.Println(1)
,输出1
。
- 当程序执行到