MST

星途 面试题库

面试题:Go语言中defer执行顺序基础示例分析

以下是一段Go语言代码: ```go package main import "fmt" func main() { fmt.Println("start") defer fmt.Println("defer1") defer fmt.Println("defer2") fmt.Println("end") } ``` 请分析并说明该程序的输出结果及原因。
43.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
start
end
defer2
defer1
  1. 原因
    • 程序首先执行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