⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go defer 延迟执行

defer 确保资源清理,LIFO 顺序,参数求值时机 · 难度:入门 · +20XP

defer — "最后一定要执行"

defer 让函数调用在当前函数返回前执行。最常用于关闭文件、释放锁、记录日志。类似于 Java 的 finally 或 Python 的 with 语句。

基本用法

func readFile(path string) error {
    f, err := os.Open(path)
    if err != nil { return err }
    defer f.Close()  // 函数返回前一定执行,不用怕忘记关

// 读取和处理文件... return nil }

defer 的执行顺序:后进先出(LIFO)

defer fmt.Println("第3个 defer")
defer fmt.Println("第2个 defer")
defer fmt.Println("第1个 defer")
fmt.Println("正常代码")
// 输出:
// 正常代码
// 第1个 defer
// 第2个 defer
// 第3个 defer

defer 的参数求值时机

defer 语句立即求值参数,但函数调用延迟执行:

x := 1
defer fmt.Println(x)  // x 此时为 1,defer 执行时也输出 1
x = 2                 // 改 x 不影响 defer 的参数

实际应用:计时

func trackTime(name string) func() {
    start := time.Now()
    return func() { fmt.Printf("%s: %v
", name, time.Since(start)) }
}
defer trackTime("总耗时")()  // 函数结束时自动打印耗时
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0