Go за Прикладом: Діапазон (Range)

Work in Progress / Сайт в процесі розробки

Ключове слово range (діапазон) ітерує по елементах в деяких структурах даних доступних в Go. Давайте подивимось, як використовувати range з вже знайомими нам структурами даних.

package main
import "fmt"
func main() {

Ось - приклад сумування чисел у зрізі. З масивами це працює аналогічним чином.

    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

range на масивах та зрізах видає і індекс і значення для кожного з входжень. У праклиді вище нам не потрібен був індекс, отож ми ігнорували його за допомогою пустого ідентфиікатора _. Але, інколи, індекс буває потрібен.

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

range застосований на мапу поверне ключ та значення пари.

    kvs := map[string]string{"a": "абрикос", "b": "банан"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

range також може просто ітерувати ключі на мапі.

    for k := range kvs {
        fmt.Println("key:", k)
    }

range на рядку ітеруватиме через Unicode’ні коди. Першим значенням буде початковий байт індекс руни (rune), а другим сама руна (rune - це тип значення в Go).

    for i, c := range "го" {
        fmt.Println(i, c)
    }
}
$ go run range.go
sum: 9
index: 1
a -> абрикос
b -> банан
key: a
key: b
0 1075
2 1086

Наступний приклад: Функції (Functions).