воскресенье, 6 января 2019 г.

Основы Go: оператор defer

Оператор 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


Читайте также:


Комментариев нет:

Отправить комментарий