📅  最后修改于: 2023-12-03 15:30:59.681000             🧑  作者: Mango
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()
函数,以确保文件得以关闭并释放有关它的所有资源。