Ответ
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
Это полезно, например, для закрытия ресурсов в обратном порядке их открытия.