суббота, 7 ноября 2020 г.

Go style guides: defer для приборки

Используйте defer для очистки ресурсов, таких как файлы и блокировки.

Неудачный вариант:

p.Lock()
if p.count < 10 {
    p.Unlock()
    return p.count
}

p.count++
newCount := p.count
p.Unlock()

return newCount

// разблокировку легко пропустить 
// из-за многократного возврата

Хороший вариант:

p.Lock()
defer p.Unlock()

if p.count < 10 {
    return p.count
}

p.count++
return p.count

// более читаемый вариант

Defer имеет чрезвычайно небольшие накладные расходы, и его следует избегать, только если вы можете доказать, что время выполнения вашей функции составляет наносекунды. Выигрыш в удобочитаемости использования defer стоит минимальных затрат на их использование. Это особенно верно для более крупных методов, которые имеют больше, чем простой доступ к памяти, где другие вычисления более важны, чем defer.


Читайте также:


Комментариев нет:

Отправить комментарий