Ответ
Defer в Go — это ключевое слово, откладывающее выполнение функции до завершения окружающей функции. Оно гарантирует выполнение, даже если произойдет паника. Часто используется для освобождения ресурсов (закрытие файлов, разблокировка мьютексов и т.д.).
func readFile() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close() // Закроет файл при выходе из функции
// Работа с файлом
}
Особенности:
- Вызовы
deferвыполняются в порядке LIFO (последний добавленный — первый выполненный) - Аргументы функции вычисляются в момент вызова
defer, а не выполнения - Удобен для cleanup-операций, но не подходит для критичных к производительности участков кода
Видео-ответы
▶