MST

星途 面试题库

面试题:Go语言中defer语句在延迟任务里的基本使用

请简述Go语言中defer语句的作用,并举例说明在延迟任务场景下,如何使用defer语句确保资源的正确释放(比如文件句柄的关闭)。
50.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

defer语句的作用

在Go语言中,defer语句用于注册一个延迟执行的函数。这个函数会在包含defer语句的函数即将返回时执行,无论该函数是正常返回还是因为发生了恐慌(panic)而异常返回。defer主要用于确保在函数结束时执行一些清理操作,比如关闭文件、释放锁、关闭数据库连接等,从而避免资源泄露。

延迟任务场景下确保资源正确释放的示例(以文件句柄关闭为例)

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("example.txt")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close() // 注册延迟关闭文件操作

    // 这里进行文件读取等操作
    data := make([]byte, 1024)
    n, err := file.Read(data)
    if err != nil {
        fmt.Println("Error reading file:", err)
        return
    }
    fmt.Println("Read", n, "bytes:", string(data[:n]))
}

在上述代码中,defer file.Close()确保了无论文件读取操作是否成功,在main函数结束时,文件句柄file都会被正确关闭,避免了文件资源的泄露。如果没有defer语句,当读取文件发生错误提前返回时,文件可能不会被关闭。