Конструкция defer используется для планирования выполнения функции после завершения объемлющей функции, независимо от того, завершилась ли она успешно или с ошибкой. Это особенно полезно для освобождения ресурсов, таких как закрытие файлов или сетевых соединений, снятие блокировок.
Функции, объявленные с defer, выполняются в порядке, обратном их объявлению (LIFO - Last In, First Out).
Пример использования для закрытия файла:
go
Пример использования для освобождения блокировки:
go
Важные моменты:
defer, вычисляются в момент объявления defer, а не при фактическом вызове отложенной функции.defer в одной функции выполняются в порядке LIFO.defer не может быть использован в глобальной области видимости.