场景 | 描述 |
---|---|
文件操作 | defer file.Close() 避免忘记关闭文件 |
锁操作 | defer mu.Unlock() 确保释放锁 |
数据库事务 | defer tx.Rollback() 或 Commit() |
捕获异常 | 搭配 recover() 使用来捕获 panic |
golangfunc test() {
defer fmt.Println("A")
defer fmt.Println("B")
defer fmt.Println("C")
}
执行结果是:
golangC B A
gofor i := 0; i < 3; i++ {
defer fmt.Println(i)
}
// 输出:2 2 2(不是 2 1 0)
原因: defer 延迟执行,i 的值在循环结束时为 2,所有 defer 引用的是同一个 i 正确的写法
gofor i := 0; i < 3; i++ {
v := i
defer fmt.Println(v)
}
// 输出:2 1 0
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!