Back to questions
Yadro
Middle+
4
Что такое defer? Как работает? Вызывается ли при панике?
Companies where asked
Answer from AI
sobes.tech AI
В Go ключевое слово defer используется для отложенного вызова функции — она будет выполнена после завершения окружающей функции, независимо от того, как она завершилась (нормально или с ошибкой).
Как работает defer:
- В момент выполнения оператора
deferфункция не вызывается сразу, а помещается в стек отложенных вызовов. - После завершения функции, в которой объявлен
defer, все отложенные функции вызываются в обратном порядке.
При панике (panic) отложенные функции defer всё равно вызываются, что позволяет, например, корректно освобождать ресурсы или логировать ошибки перед завершением программы.
Пример:
func example() {
defer fmt.Println("Отложенный вызов")
fmt.Println("Перед паникой")
panic("Что-то пошло не так")
// Отложенный вызов выполнится даже после паники
}
В этом примере "Отложенный вызов" будет выведен несмотря на панику.