使用 defer 来做清理工作

使用 defer 来做资源的清理工作,例如文件的关闭和锁的释放。

BadGood
  1. p.Lock()
  2. if p.count < 10 {
  3. p.Unlock()
  4. return p.count
  5. }
  6. p.count++
  7. newCount := p.count
  8. p.Unlock()
  9. return newCount
  10. // 当有多处 return 时容易忘记释放锁
  1. p.Lock()
  2. defer p.Unlock()
  3. if p.count < 10 {
  4. return p.count
  5. }
  6. p.count++
  7. return p.count
  8. // 可读性更高

defer 只有非常小的性能开销,只有当你能证明你的函数执行时间在纳秒级别时才可以不使用它。使用 defer 对代码可读性的提高是非常值得的,因为使用 defer 的成本真的非常小。特别是在一些主要是做内存操作的长函数中,函数中的其他计算操作远比 defer 重要。