面试题答案
一键面试- defer语句执行顺序分析:
- 在Go语言中,defer语句会被压入一个栈中。当函数执行结束时,这些defer语句会按照后进先出(LIFO,Last In First Out)的顺序执行。
- 在这段代码中,首先遇到
defer fmt.Println("defer1")
,它被压入defer栈。然后遇到defer fmt.Println("defer2")
,它也被压入defer栈,此时defer2
在栈顶,defer1
在栈底。
- 最终输出结果:
- 程序开始执行,首先输出
start
。 - 接着输出
end
。 - 函数执行结束,按照defer栈的后进先出顺序,先执行栈顶的
defer fmt.Println("defer2")
,输出defer2
。 - 然后执行栈底的
defer fmt.Println("defer1")
,输出defer1
。
- 程序开始执行,首先输出
所以最终输出结果为:
start
end
defer2
defer1