Специфика работы 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"
}
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
changePointer() вызывается, потому что это необходимо для получения результата, который может быть использован в fmt.Println(changePointer()). Функция changePointer выполняется, чтобы получить результат, который возвращается в main, и только после этого запланированные defer-вызовы выполняются.