面试题答案
一键面试程序的输出结果为:
start
end
defer2
defer1
原因如下:
fmt.Println("start")
首先执行,输出start
。- 遇到
defer fmt.Println("defer1")
,defer
语句会将其后面的函数调用压入一个栈中,这里将fmt.Println("defer1")
压入栈。 - 遇到
defer fmt.Println("defer2")
,同样将fmt.Println("defer2")
压入栈,此时栈顶为fmt.Println("defer2")
,栈底为fmt.Println("defer1")
。 fmt.Println("end")
执行,输出end
。- 当
main
函数执行完毕(这里没有显式的返回,但执行到函数末尾等同于返回),defer
栈中的函数会按照后进先出(LIFO,Last In First Out)的顺序依次执行,所以先执行fmt.Println("defer2")
输出defer2
,再执行fmt.Println("defer1")
输出defer1
。