defer
210 字
1 分钟
defer
defer
func main() { defer fmt.Println("defer world") // 之后执行 fmt.Println("hello1") fmt.Println("hello2")}---------hello1hello2defer world
defer和return
在return之后调用
defer 的使用场景
1. 资源释放(关闭文件 / 连接)
f, err := os.Open("file.txt")if err != nil { log.Fatal(err)}defer f.Close() // 函数返回前自动关闭文件2. 释放锁
mu.Lock()defer mu.Unlock() // 忘记解锁或提前 return 也不会死锁3. panic 恢复(recover)
defer func() { if r := recover(); r != nil { fmt.Println("恢复 panic:", r) }}()4. 记录函数执行时间 / 日志
func foo() { start := time.Now() defer func() { fmt.Println("耗时:", time.Since(start)) }() // ...}5. 关闭 HTTP 响应体
resp, err := http.Get(url)if err != nil { return err}defer resp.Body.Close()注意点
- defer 按 LIFO(后进先出) 顺序执行
- 参数在 defer 语句执行时就立即求值(不是函数返回时)
- 即使发生 panic,defer 也一定会执行
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
1 变量和常量
golang 1 变量和常量
2
2 输入输出
golang 2 输入输出
3
3 基本数据类型
golang 3 基本数据类型
4
4 数组、切片和Map
golang 4 数组、切片和Map
5
5 判断
golang 5 判断
随机文章 随机推荐