Что выведет код Junior Горутины и планировщик GMP спрашивают часто обновлено
Что выведет Go: замыкания в цикле в Go 1.22+
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23.
package main
import "fmt"
func main() {
var fns []func()
for i := 0; i < 3; i++ {
fns = append(fns, func() { fmt.Print(i, " ") })
}
for _, f := range fns {
f()
}
fmt.Println()
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 0 1 2. Модуль с go 1.23 в go.mod использует семантику Go 1.22: у каждой итерации своя переменная i, и каждое замыкание запоминает своё значение.
Что выведет
0 1 2
Разбор
Модуль с go 1.23 в go.mod использует семантику Go 1.22: у каждой итерации своя переменная i, и каждое замыкание запоминает своё значение. В Go 1.21 и раньше все три замыкания делили одну переменную и напечатали бы 3 3 3.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.