Несколько defer выполняются в порядке LIFO (последний зарегистрированный - первый выполненный). Они складываются в стек. Это удобно для ресурсов: первый открытый ресурс закрывается последним, что соответствует вложенности использования.
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
// Вывод при выходе: 3, 2, 1