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 的执行顺序和用途的详细内容。更多信息请关注PHP中文网其他相关文章!