Почему переменная итерации x не замечает, что a[1] обновлено?
var a [2]int
for _, x := range a {
fmt.Println("x =", x)
a[1] = 8
}
fmt.Println("a =", a)
x = 0
x = 0 <- Почему здесь не 8?
a = [0 8]
Ответ
Выражение range a
вычисляется один раз перед началом цикла, а копия массива используется для генерации значений итерации.
Чтобы избежать копирования массива, итерируйте срез.
var a [2]int
for _, x := range a[:] {
fmt.Println("x =", x)
a[1] = 8
}
fmt.Println("a =", a)
x = 0
x = 8
a = [0 8]
Читайте также:
- Изменение записей в range цикле в Golang
- Основы Go: range, итерация по срезам и картам
- Эффективный Go: цикл for
Комментариев нет:
Отправить комментарий