2025-05-15
golang
00

目录

golang基础学习
defer 的使用场景
defer 的执行顺序
defer 的常见陷阱

golang基础学习

defer 的使用场景

场景描述
文件操作defer file.Close() 避免忘记关闭文件
锁操作defer mu.Unlock() 确保释放锁
数据库事务defer tx.Rollback()Commit()
捕获异常搭配 recover() 使用来捕获 panic

defer 的执行顺序

  • 先进后出
golang
func test() { defer fmt.Println("A") defer fmt.Println("B") defer fmt.Println("C") }

执行结果是:

golang
C B A

defer 的常见陷阱

go
for i := 0; i < 3; i++ { defer fmt.Println(i) } // 输出:2 2 2(不是 2 1 0)

原因: defer 延迟执行,i 的值在循环结束时为 2,所有 defer 引用的是同一个 i 正确的写法

go
for i := 0; i < 3; i++ { v := i defer fmt.Println(v) } // 输出:2 1 0

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!