Конструкция defer реализует концепт отложенного выполнения функции. Отложенная функция выполняется непосредственно перед завершением функции, содержащей defer.
Ключевые моменты:
- Время выполнения: Отложенная функция выполняется в самом конце родительской функции, даже если произошла паника или исключение.
- Стек: Отложенные вызовы образуют стек. Последний отложенный вызов будет выполнен первым (LIFO).
- Захват переменных: Аргументы отложенной функции вычисляются в момент объявления
defer, а не в момент выполнения.
Примеры типичного использования:
- Закрытие файлов, сетевых соединений, мьютексов.
- Восстановление состояния (например, после изменения глобальных переменных или флагов).
- Измерение времени выполнения.
go
go
Отложенные вызовы с аргументами:
go