Для чего нужен defer в Go

«Для чего нужен defer в Go» — вопрос из категории Golang, который задают на 34% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

defer в Go используется для отложенного выполнения функции или метода до завершения текущей функции. Это удобно для освобождения ресурсов (закрытие файлов, разблокировка мьютексов) или выполнения завершающих действий (логирование, восстановление после паники).

Пример:

func readFile(filename string) error {
    file, err := os.Open(filename)
    if err != nil {
        return err
    }
    defer file.Close() // Закроет файл при выходе из функции

    // Работа с файлом...
    return nil
}

Особенности:

  1. Вызовы defer выполняются в обратном порядке (LIFO)
  2. Аргументы функции вычисляются в момент вызова defer, а не выполнения
  3. Полезен для cleanup-операций и обработки ошибок