В какой последовательности выполняются несколько defer

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

Ответ

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

Пример:

func main() {
    defer fmt.Println("1")
    defer fmt.Println("2")
    defer fmt.Println("3")
}

Вывод:

3
2
1

Это полезно, например, для закрытия ресурсов в обратном порядке их открытия.