Какая область видимости Defer

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

Ответ

Defer имеет область видимости функции, в которой он объявлен. Он выполняется перед выходом из функции, независимо от того, произошёл ли выход по return, panic или просто достигнут конец функции.

Пример:

func main() {
    defer fmt.Println("deferred in main") // выполнится при выходе из main
    if true {
        defer fmt.Println("deferred in if") // выполнится перед выходом из main
    }
    fmt.Println("main end")
}
// Вывод:
// main end
// deferred in if
// deferred in main

Важно:

  • Порядок выполнения defer — LIFO (последний добавленный — первый выполнится).
  • Defer "запоминает" значения переменных на момент объявления, а не выполнения.