MST

星途 面试题库

面试题:Go中defer执行顺序基础考察

请分析以下Go代码中defer语句的执行顺序,并说明最终的输出结果。 ```go package main import "fmt" func main() { fmt.Println("start") defer fmt.Println("defer1") defer fmt.Println("defer2") fmt.Println("end") } ```
12.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

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

所以最终输出结果为:

start
end
defer2
defer1