Senior
34
Что такое defer? Как эта история устроена и после чего выполняется этот оператор?
Компании, где спрашивали
.wrk
Ответ от нейросети
sobes.tech AI
В языке Go оператор defer используется для отложенного выполнения функции — она будет вызвана после завершения окружающей функции, но перед её возвратом.
Это удобно для освобождения ресурсов, закрытия файлов, разблокировки мьютексов и т.п., гарантируя, что нужный код выполнится даже при ошибках или ранних выходах.
Пример:
func readFile() error {
f, err := os.Open("file.txt")
if err != nil {
return err
}
defer f.Close() // Закроется в конце функции
// Работа с файлом
return nil
}
Выполнение defer происходит в обратном порядке добавления (стек вызовов), сразу после того, как функция, в которой объявлен defer, начинает завершаться, но до возврата управления вызывающему коду.