Back to questions
Junior
3
Что такое defer в Go? Что выведет код? Как сделать, чтобы вывелось 4,5,6 вместо 1,2,3?
Companies where asked
Позитив Технолоджис
Answer from AI
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 для этого вывода.