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 的执行顺序和用途的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:pansz,转转请注明出处:https://www.dingdanghao.com/article/518245.html