Sobes.tech
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, начинает завершаться, но до возврата управления вызывающему коду.