Изучение ключевого слова range в Go

Beginner

This tutorial is from open-source community. Access the source code

Введение

Ключевое слово range используется для перебора элементов в различных структурах данных в Golang. В этом практическом занятии мы изучим, как использовать range с разными структурами данных.

Range

Задача, которую нужно решить в этом практическом занятии, — показать, как использовать range с срезами, массивами, картами и строками.

Для завершения этого практического занятия вам понадобятся:

  • Основы синтаксиса Golang
  • Установленный на вашем компьютере Golang
$ go run range.go
sum: 9
index: 1
a - > apple
b - > banana
key: a
key: b
0 103
1 111

Ниже представлен полный код:

// _range_ перебирает элементы в различных структурах
// данных. Посмотрим, как использовать `range` с некоторыми
// из структур данных, которые мы уже изучали.

package main

import "fmt"

func main() {

    // Здесь мы используем `range` для суммирования чисел в срезе.
    // Массивы работают так же.
    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": "apple", "b": "banana"}
    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`. См. раздел
    // [Strings and Runes](strings-and-runes) для более
    // подробной информации.
    for i, c := range "go" {
        fmt.Println(i, c)
    }
}

Резюме

В этом практическом занятии мы узнали, как использовать range с срезами, массивами, картами и строками в Golang. Ключевое слово range предоставляет удобный способ перебора элементов в различных структурах данных.