面试题答案
一键面试- 输出结果:
start
end
defer2
defer1
- 原因:
- 程序首先执行
fmt.Println("start")
,输出start
。 - 接着遇到
defer fmt.Println("defer1")
,defer
语句会将其后的函数调用压入栈中,但并不立即执行。 - 然后遇到
defer fmt.Println("defer2")
,同样将该函数调用压入栈中,此时栈的顺序是defer2
在栈顶,defer1
在栈底(因为defer
函数调用是后入先出的顺序)。 - 再执行
fmt.Println("end")
,输出end
。 - 当
main
函数执行完毕,会按照defer
压入栈的逆序(后入先出)执行defer
语句后的函数,所以先输出defer2
,再输出defer1
。
- 程序首先执行