MST

星途 面试题库

面试题:Go语言中defer执行顺序基础理解

在Go语言中,以下代码输出什么?请解释原因。 ```go package main import "fmt" func main() { defer fmt.Println(1) defer fmt.Println(2) fmt.Println(3) } ```
38.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    3
    2
    1
    
  2. 原因解释
    • 在Go语言中,defer语句会将其后面跟随的函数推迟到包含该defer语句的函数结束时执行。
    • 当执行defer fmt.Println(1)时,fmt.Println(1)函数被推迟执行。
    • 接着执行defer fmt.Println(2)fmt.Println(2)函数也被推迟执行。
    • 然后执行fmt.Println(3),所以先输出3
    • main函数结束时,按照defer语句后进先出(LIFO,Last In First Out)的顺序执行被推迟的函数。所以先执行fmt.Println(2),输出2,再执行fmt.Println(1),输出1