使用defer清理资源,比如文件或锁
Bad
p.Lock()
if p.count < 10 {
p.Unlock()
return p.count
}
p.count++
newCount := p.count
p.Unlock()
return newCount
//由于多个返回语句,容易遗漏unlocks
easy to miss unlocks due to multiple returns
Good
p.Lock()
defer p.Unlock()
if p.count < 10 {
return p.count
}
p.count++
return p.count
// 更可读
Defer拥有非常小的开销,只有在您可以证明您的函数执行在纳秒数量级时,才应该避免使用Defer。使用延迟所带来的可读性优势是值得的,因为使用它们的成本非常低。
尤其适用于那些不仅仅是简单内存访问的较大的方法,在这些方法中其他计算的资源消耗远超过defer。