Как работает range в Go?

Junior
1.6k просмотров
AFK Offer AI

range итерирует по слайсам, массивам, картам, строкам и каналам.

// Слайс: индекс + значение
for i, v := range []int{10, 20, 30} {
    fmt.Println(i, v)
}

// Карта: ключ + значение (порядок случайный!) for k, v := range map[string]int{"a": 1} { fmt.Println(k, v) }

// Строка: индекс байта + rune (Unicode) for i, r := range "Привет" { fmt.Printf("%d: %c\n", i, r) }

// Канал: читает до закрытия for msg := range ch { fmt.Println(msg) }

Ловушка: range копирует значение. Если нужна модификация элемента слайса — обращайся по индексу: slice[i].field = ....

Следующий вопрос

Как передаются структуры в Go — по значению или по ссылке?