当资源不再被使用时,使用 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)
(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()
它也能用于不要忘了在一个报告中打印页脚。