• 使用 defer 来做清理工作

    使用 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 重要。