Специфика работы defer
Почему в данной ситуации сначала выводится "Second" и "Third" (хотя они должны идти после "First"), а "Fourth" как раз лишь только после "First"? Хотя насколько мне известно, defer должен срабатывать перед закрытием функции, в которой он объявлен. Я понимаю, что это связано с моей некомпетентностью, объясните пожалуйста.
package main
import "fmt"
func main() {
defer fmt.Println(changePointer())
fmt.Println("First")
}
func changePointer() string {
defer fmt.Println("Third")
fmt.Println("Second")
return "Fourth"
}
Источник: Stack Overflow на русском