Перейти к содержанию

Циклы

Цикл — это повторение действий: пройти по числам от 1 до 100, обработать все элементы списка, читать ввод пока пользователь не введёт «выход». В Go все циклы — это for. Других ключевых слов нет.

Что должен понять

  • Три формы for: классическая, while-стиль, for-range.
  • Как использовать break и continue.
  • Чем отличается обход слайса и обход мапы.
  • Что порядок обхода мапы случайный.

Классический for

for i := 0; i < 5; i++ {
    fmt.Println(i)
}
// 0 1 2 3 4

Три части: инициализация, условие, шаг. Скобок вокруг — нет.

While-стиль

В Go нет while. Просто оставь только условие:

n := 10
for n > 0 {
    fmt.Println(n)
    n--
}

Бесконечный цикл — пустой for:

for {
    line := readLine()
    if line == "exit" {
        break
    }
    process(line)
}

for-range по слайсу

nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30

Если индекс не нужен — замени на _:

sum := 0
for _, v := range nums {
    sum += v
}

for-range по мапе

ages := map[string]int{"Anna": 25, "Boris": 30, "Clara": 22}
for name, age := range ages {
    fmt.Println(name, age)
}

Порядок ключей не определён — каждый запуск может быть разным. Если нужен стабильный порядок, отсортируй ключи отдельно.

break и continue

  • break — выйти из цикла.
  • continue — перейти к следующей итерации.
for i := 1; i <= 10; i++ {
    if i%2 == 0 {
        continue        // пропустить чётные
    }
    if i > 7 {
        break           // остановиться
    }
    fmt.Println(i)      // 1 3 5 7
}

Типичные ошибки

  • Пытаются писать while (cond) — такого синтаксиса нет.
  • В for-range забывают _, и компилятор ругается на неиспользованный i.
  • Полагаются на порядок ключей мапы. Не делай так.

Критерии приёмки модуля

  • Программа печатает числа от 1 до N через классический for.
  • Программа суммирует элементы слайса через for-range.
  • Программа печатает все пары ключ-значение мапы.
  • Программа корректно использует break и continue хотя бы один раз.

Дальше: Слайсы (часть 1).