
"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"
}
changePointer()
вызывается, потому что это необходимо для получения результата, который может быть использован в fmt.Println(changePointer())
. Функция
changePointer
выполняется, чтобы получить результат, который возвращается в main
, и только после этого запланированные defer
— вызовы выполняются.Вот такие дела
@golang_interview