24 Коллекции
Что именно отдаёт range?
Ответ
По slice range даёт индекс и копию элемента. По строке — байтовый индекс и руну. По карте — ключ и копию значения, в случайном порядке. По каналу — значения, пока канал не закроют.
Подробнее
Раз переменная цикла — копия, n *= 10 не меняет slice. Чтобы изменить элемент, пиши по индексу: nums[i] *= 10.
То же с картой: значение из range — копия. Обновление поля этой копии не попадает обратно в карту, нужна запись m[k] = v.
package main
import "fmt"
func main() {
nums := []int{10, 20, 30}
for i, n := range nums {
fmt.Println(i, n)
}
for _, n := range nums {
n *= 10
}
fmt.Println("после правки копии", nums)
for i := range nums {
nums[i] *= 10
}
fmt.Println("после записи по индексу", nums)
}