Что выведет код Junior Ошибки, defer, panic и recover спрашивают часто обновлено
Что выведет Go: порядок defer и вычисление аргументов
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
defer fmt.Print(i, " ")
}
x := 10
defer fmt.Println("x =", x)
x = 20
fmt.Print("start ")
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: start x = 10, 2 1 0. Отложенные вызовы выполняются в обратном порядке.
Что выведет
start x = 10
2 1 0
Разбор
Отложенные вызовы выполняются в обратном порядке. Последним отложен Println с x, его аргумент вычислен сразу (10), он выполнится первым после start . Затем Print из цикла в обратном порядке: 2, 1, 0 (аргументы тоже зафиксированы в момент defer).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Калькулятор int64 с ошибками вместо паник на Go
Следующий вопрос
Что выведет Go: errors.Is и errors.As по цепочке