defer 函数在 go 语言中用于延迟函数调用到函数返回前执行,按后进先出 (lifo) 的顺序调用。其用途包括释放资源、记录日志和恢复异常。后延迟的函数将在先延迟的函数之前调用。
Go 语言中 defer 函数的执行顺序和用途
defer 函数
defer 是 Go 语言中一个独特的关键字,它可以将函数调用推迟到函数返回之前执行。当函数返回时,被延迟的函数按后进先出 (LIFO) 的顺序调用。
defer 的用途
defer 主要用于以下场景:
- 释放资源(清理操作):用于在函数退出前释放已分配的资源,如文件句柄、数据库连接或锁。
- 记录日志:用于在函数返回时记录某些事件或错误。
- 恢复异常:用于处理异常并执行清理操作。
defer 的执行顺序
被延迟的函数调用在函数返回时按后进先出顺序执行。这意味着后延迟的函数将在先延迟的函数之前调用。
实战案例:释放文件句柄
package main
import (
"fmt"
"os"
)
func main() {
// defer 语句将函数 os.File.Close() 调用推迟到 main() 函数返回之前执行。
f, err := os.Open("myfile.txt")
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
// 使用 defer 可以确保文件句柄在函数返回时始终被关闭。
fmt.Println("File opened successfully.")
}
输出:
File opened successfully.
其他示例:
记录日志:
defer fmt.Println("Function completed.")
恢复异常:
func safeOperation() (result, err error) { // ...省略业务代码... if err != nil { // 如果操作失败,记录错误并恢复。 defer func() { fmt.Println("Operation failed with error:", err) }() return nil, err } // 操作成功,返回结果。 return result, nil }
以上就是Golang 函数 defer 的执行顺序和用途的详细内容,更多请关注编程网其它相关文章!