MST

星途 面试题库

面试题:Go中defer执行时机基础考察

在Go语言中,以下代码的输出结果是什么,并解释defer的执行时机。 ```go package main import "fmt" func main() { fmt.Println("start") defer fmt.Println("defer1") fmt.Println("middle") defer fmt.Println("defer2") fmt.Println("end") } ```
21.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    start
    middle
    end
    defer2
    defer1
    
  2. defer的执行时机
    • defer语句会将其后面跟随的语句延迟到包含该defer语句的函数即将返回时才执行。
    • main函数中,首先输出start,然后遇到defer fmt.Println("defer1"),将fmt.Println("defer1")这一语句延迟到main函数返回时执行。接着输出middle,又遇到defer fmt.Println("defer2"),将fmt.Println("defer2")延迟到main函数返回时执行。再输出end,此时main函数执行完毕准备返回,按照后进先出(LIFO,Last In First Out)的顺序执行延迟的defer语句,所以先输出defer2,再输出defer1