Используйте 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.
Читайте также:
- Встроенные отсрочки в Golang
- Основы Go: оператор defer
- Эффективный Go: оператор defer
- Defer, Panic, и Recover в Golang
Комментариев нет:
Отправить комментарий