← ко всем постам
2026-07-30 · #basics

defer, panic и recover: аккуратная уборка

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

mu.Lock()
defer mu.Unlock()
// ... работаем с общими данными,
// Unlock вызовется в любом случае

Порядок LIFO

Несколько defer выполняются в обратном порядке — последний объявленный сработает первым. Это логично: ресурсы освобождаются в порядке, обратном захвату.

recover — только на границе

Ловить панику через recover имеет смысл на верхнем уровне — например, в обработчике HTTP, чтобы одна паника не уронила весь сервер. Использовать панику как обычный поток управления не стоит.