Что выведет следующий код в Go 1.24?
package main
import "fmt"
func main() {
values := []int{10, 20, 30}
funcs := []func(){}
for v := range values {
funcs = append(funcs, func() {
fmt.Println(v)
})
}
for _, f := range funcs {
f()
}
}
Варианты ответа:
A)
1
2
B)
2
2
C)
20
30
D)
0
0
---
✅ Правильный ответ: A
Почему:
В Go 1.24 при использовании
for v := range, переменная v копируется на каждой итерации, а не переиспользуется. Таким образом, замыкания получают своё собственное значение v на каждой итерации. Здесь
range возвращает индексы (0, 1, 2), а не значения среза.Чтобы получить значения (
10, 20, 30), нужно использовать for _, v := range values.