Sobes.tech
Назад к вопросам
Junior
4

Что такое defer в Go? Что выведет код? Как сделать, чтобы вывелось 4,5,6 вместо 1,2,3?

Компании, где спрашивали
Позитив Технолоджис

Ответ от нейросети

sobes.tech AI

В Go ключевое слово defer откладывает выполнение функции до момента выхода из окружающей функции. Все отложенные вызовы выполняются в обратном порядке (LIFO).

Пример:

package main
import "fmt"

func main() {
    defer fmt.Println(3)
    defer fmt.Println(2)
    defer fmt.Println(1)
}

Этот код выведет:

1
2
3

Потому что вызовы defer выполняются в обратном порядке их объявления.

Чтобы вывести 4,5,6 вместо 1,2,3, нужно изменить порядок вызовов defer или отказаться от них и вызвать функции напрямую:

package main
import "fmt"

func main() {
    fmt.Println(4)
    fmt.Println(5)
    fmt.Println(6)
}

Или, если нужно использовать defer, то объявлять их в обратном порядке:

package main
import "fmt"

func main() {
    defer fmt.Println(4)
    defer fmt.Println(5)
    defer fmt.Println(6)
}

Этот код выведет:

6
5
4

Чтобы получить именно 4,5,6 с defer, нужно использовать дополнительные функции или не использовать defer для этого вывода.