Sobes.tech
Назад к вопросам
Middle+
3

Что такое defer? Как работает? Вызывается ли при панике?

Компании, где спрашивали
YadroYadro

Ответ от нейросети

sobes.tech AI

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

Как работает defer:

  • В момент выполнения оператора defer функция не вызывается сразу, а помещается в стек отложенных вызовов.
  • После завершения функции, в которой объявлен defer, все отложенные функции вызываются в обратном порядке.

При панике (panic) отложенные функции defer всё равно вызываются, что позволяет, например, корректно освобождать ресурсы или логировать ошибки перед завершением программы.

Пример:

func example() {
    defer fmt.Println("Отложенный вызов")
    fmt.Println("Перед паникой")
    panic("Что-то пошло не так")
    // Отложенный вызов выполнится даже после паники
}

В этом примере "Отложенный вызов" будет выведен несмотря на панику.