MST
星途 面试题库

面试题:Go中defer与匿名函数结合使用场景分析

请描述一个在Go语言中,使用defer与匿名函数结合来处理资源清理的实际场景,并编写相应代码。
41.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,defer与匿名函数结合常用于文件操作场景,确保文件在使用完毕后被正确关闭。

假设我们要读取一个文件的内容,示例代码如下:

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        fmt.Println("无法打开文件:", err)
        return
    }
    defer func() {
        err := file.Close()
        if err != nil {
            fmt.Println("关闭文件时出错:", err)
        }
    }()

    // 这里进行文件读取操作
    // 例如:
    data := make([]byte, 1024)
    n, err := file.Read(data)
    if err != nil {
        fmt.Println("读取文件时出错:", err)
        return
    }
    fmt.Println("读取到的内容:", string(data[:n]))
}

在上述代码中:

  1. 首先使用os.Open打开文件,如果打开失败则打印错误并返回。
  2. 使用defer关键字结合匿名函数,在函数结束时关闭文件。匿名函数中对文件关闭操作的错误进行了处理。
  3. defer语句之后,进行文件的读取操作,读取文件内容并打印。

通过这种方式,无论文件读取过程中是否发生错误,文件都会在函数结束时被关闭,从而保证资源的正确清理。