Что такое Defer

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

Ответ

Defer в Go — это ключевое слово, откладывающее выполнение функции до завершения окружающей функции. Оно гарантирует выполнение, даже если произойдет паника. Часто используется для освобождения ресурсов (закрытие файлов, разблокировка мьютексов и т.д.).

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

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

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

  • Вызовы defer выполняются в порядке LIFO (последний добавленный — первый выполненный)
  • Аргументы функции вычисляются в момент вызова defer, а не выполнения
  • Удобен для cleanup-операций, но не подходит для критичных к производительности участков кода