MST

星途 面试题库

面试题:Go语言中defer在资源清理场景下的执行顺序

在Go语言中,如果有多个defer语句用于资源清理,它们的执行顺序是怎样的?请通过一段简单的代码示例说明,并解释原因。
27.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,多个defer语句的执行顺序是后进先出(LIFO),也就是最后定义的defer语句最先执行。

以下是代码示例:

package main

import "fmt"

func main() {
    fmt.Println("开始执行")
    defer fmt.Println("第一个defer")
    defer fmt.Println("第二个defer")
    defer fmt.Println("第三个defer")
    fmt.Println("执行结束")
}

上述代码输出结果为:

开始执行
执行结束
第三个defer
第二个defer
第一个defer

原因是defer语句在定义时,会将其放入一个栈中。当函数执行完毕,需要进行资源清理时,会从这个栈中按照后进先出的顺序依次取出defer语句并执行,这就保证了资源按照合理的顺序被清理,例如在文件操作中,先打开的文件后关闭,符合资源管理的逻辑。