Golang 如何使用defer语句来释放资源

4 min read

在 Golang 中,可以使用 defer 语句来释放资源,确保函数执行完毕后资源得到正确的释放。

例如,如果你需要在函数执行的过程中打开一个文件,并在函数执行完毕后关闭文件,你可以使用 defer 语句来确保文件得到正确的关闭,如下所示:

func openFile(filename string) error {
    // 打开文件
    f, err := os.Open(filename)
    if err != nil {
        return err
    }

    // 在函数返回之前关闭文件
    defer f.Close()

    // 使用文件

    // ...
    
    return nil
}

在上面的示例中,defer f.Close() 语句会在函数返回之前执行,确保文件得到正确的关闭。

除了文件,你也可以使用 defer 语句来释放其他资源,例如打开的网络连接、数据库连接、锁等等。只需要在资源打开时使用 defer 语句来释放即可。

需要注意的是,defer 语句的执行顺序是倒序的,也就是说最后一个 defer 语句会最先被执行,而第一个 defer 语句会最后被执行。因此,在使用多个 defer 语句时必须注意这个顺序。