MST

星途 面试题库

面试题:Go语言中defer执行顺序的基础应用

请编写一段Go代码,在函数中有多个defer语句,展示defer语句的执行顺序,并解释原因。
42.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

func main() {
    defer fmt.Println("defer 3")
    defer fmt.Println("defer 2")
    defer fmt.Println("defer 1")
    fmt.Println("main function")
}

执行顺序

  1. 首先输出 main function
  2. 然后按照后进先出(LIFO,Last In First Out)的顺序执行 defer 语句,依次输出 defer 1defer 2defer 3

原因

Go语言中的 defer 语句会将其后面跟随的语句延迟到包含该 defer 语句的函数即将返回时执行。当有多个 defer 语句时,它们会被压入一个栈中,在函数返回时,从栈顶开始依次弹出并执行,因此表现为后进先出的顺序。