Какой порядок вызовов отложенных функций в Go

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

Ответ

Отложенные функции (defer) в Go вызываются в порядке LIFO (Last In, First Out) — последняя добавленная выполняется первой. Они выполняются перед возвратом из функции, даже при панике.

Пример:

func main() {
    defer fmt.Println("First")
    defer fmt.Println("Second")
    defer fmt.Println("Third")
}

Вывод:

Third  
Second  
First  

Важно:

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