📜  Go Defer(1)

📅  最后修改于: 2023-12-03 15:30:59.681000             🧑  作者: Mango

Go Defer

Go语言的defer语句是一个非常实用的控制流语句。defer用于指定在函数退出前需要执行的代码。在函数调用时,代码编写者可以将一条或多条语句推迟到后续函数结束时执行。defer通常用于处理成对的操作,如打开和关闭文件、加锁和解锁等。

语法

defer语法如下:

defer functionCall(argument)

其中 functionCall 是需要在退出函数之前被执行的函数名,argument 是可选的,表示传递给函数的参数。

当函数执行到 defer 语句时,指定的 function call 会被推迟执行, 直到包含的函数执行完成并返回。请注意,defer语句的执行顺序是在函数退出时遵循 LIFO 原则(后进先出),这意味着在函数中的多个 defer 语句的执行顺序与它们的声明顺序相反。

示例

以下是具有defer语句的示例函数:

func readFile(filename string) error {
    f, err := os.Open(filename)
    if err != nil {
        return err
    }
    defer f.Close() // 在函数退出前关闭文件
    // 在这里进行文件读取操作
    return nil
}

当函数完成时,首先执行推迟的 f.Close() 函数,以确保文件得以关闭并释放有关它的所有资源。

注意事项
  • 推迟的函数调用会被延迟到当前函数返回之前执行
  • 一个函数中可以有多个defer语句,它们遵循后进先出的执行顺序
  • 如果推迟的函数需要参数,它的值会保留,但函数在推迟之前就会被调用