MST

星途 面试题库

面试题:Go中defer的执行顺序及在资源管理中的基础应用

请说明在Go语言中,多个defer语句的执行顺序是怎样的?并举例说明如何使用defer进行文件资源的管理,例如打开和关闭文件。
22.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 多个defer语句的执行顺序: 在Go语言中,多个defer语句的执行顺序是后进先出(LIFO,Last In First Out),也就是栈的顺序。当一个函数中有多个defer语句时,最后声明的defer语句会最先执行。

  2. 使用defer进行文件资源管理的示例

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        fmt.Println("Failed to open file:", err)
        return
    }
    defer file.Close()

    // 这里可以进行文件读取等操作
    // 例如:
    data := make([]byte, 1024)
    n, err := file.Read(data)
    if err != nil {
        fmt.Println("Failed to read file:", err)
        return
    }
    fmt.Println("Read data:", string(data[:n]))
}

在上述代码中,defer file.Close() 语句确保了无论 os.Open 之后的代码是否发生错误,文件最终都会被关闭。defer 语句会在函数返回之前执行,所以即使 file.Read 发生错误导致函数提前返回,file.Close() 也会被调用,从而避免文件资源泄露。