翻译进度
2
分块数量
3
参与人数

17.2. defer 模式

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

当资源不再被使用时,使用 defer 延迟调用其后的代码,确保资源能够被关闭或返回给连接池。其次最重要的是从 panic 中恢复程序运行。

(1) 关闭文件流:(参照 § 12.7)

// open a file f

defer f.Close()

(2) 解锁一个已加锁的资源 (a mutex):(参照 §9.3)

mu.Lock()

defer mu.Unlock()

(3) 关闭 channel (如果必要的话):

ch := make(chan float64)

defer close(ch)
MarksGui 翻译于 6个月前

(4) 从 panic 中恢复:(参见: 章节 13.3

defer func() {

    if err := recover(); err != nil {

        log.Printf(“run time panic: %v”, err)

    }

}

(5) 停止一个 Ticker:(参见: 章节 14.5

tick1 := time.NewTicker(updateInterval)

defer tick1.Stop()

(6) 释放一个进程 p :(参见: 章节 13.6

p, err := os.StartProcess(…, …, …)

defer p.Release()

(7) 停止 CPU 分析并刷新信息:(参见: 章节 13.10

pprof.StartCPUProfile(f)

defer pprof.StopCPUProfile()

它也能用于不要忘了在一个报告中打印页脚。

BroQiang 翻译于 6个月前

本文章首发在 GolangCaff
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:3
讨论数量: 0
发起讨论


暂无话题~