MST

星途 面试题库

面试题:Go中defer的执行顺序

在Go语言中,假设有如下代码片段: ```go func main() { defer fmt.Println(1) defer fmt.Println(2) fmt.Println(3) } ``` 请写出该程序的输出结果,并解释为什么会是这样的输出结果,说明defer的执行机制。
30.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

输出结果

3
2
1

原因及defer执行机制解释

  1. defer执行机制:在Go语言中,defer语句会将其后面跟随的函数推迟到包含该defer语句的函数即将返回时才执行。多个defer语句会以栈的形式压入,即先defer的后执行,后defer的先执行,也就是遵循后进先出(LIFO)的顺序。
  2. 具体执行过程
    • 当程序执行到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