Оператор defer
Оператор defer откладывает выполнение функции до того момента, как произойдет возврат из окружающей функции.
Аргументы отложенных вызовов вычисляются сразу же, но вызов функции не происходит до того, как произойдет возврат из окружающей функции.
package main
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
Вывод:
hello
world
Накопление отложенных вызовов
Отложенные вызовы функций сохраняются в стеке. Когда происходит возврат из функции, ее отложенные вызовы выполняются в порядке "последним-пришел-первым-вышел" (LIFO, last-in-first-out).
package main
import "fmt"
func main() {
fmt.Println("Подсчет...")
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
fmt.Println("выполнен")
}
Вывод:
Подсчет...
выполнен
9
8
7
6
5
4
3
2
1
0
Читайте также:
Комментариев нет:
Отправить комментарий