面试题答案
一键面试- 输出结果:
start middle end defer2 defer1
- defer的执行时机:
defer
语句会将其后面跟随的语句延迟到包含该defer
语句的函数即将返回时才执行。- 在
main
函数中,首先输出start
,然后遇到defer fmt.Println("defer1")
,将fmt.Println("defer1")
这一语句延迟到main
函数返回时执行。接着输出middle
,又遇到defer fmt.Println("defer2")
,将fmt.Println("defer2")
延迟到main
函数返回时执行。再输出end
,此时main
函数执行完毕准备返回,按照后进先出(LIFO,Last In First Out)的顺序执行延迟的defer
语句,所以先输出defer2
,再输出defer1
。