Junior
Какво е defer в Go? Какво ще изведе кодът? Как да направите така, че да изведе 4,5,6 вместо 1,2,3?
sobes.tech AI
Отговор от 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 для этого вывода.