Зарегистрируйтесь, чтобы продолжить обучение

Цикл For Основы Go

В Go есть только одна конструкция для организации циклов — for. Она заменяет собой и while, и do while из других языков. С её помощью можно реализовать любые виды повторений.

Классический цикл со счётчиком

Наиболее распространённый способ перебора:

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// Вывод:
// 0
// 1
// 2
// 3
// 4

Здесь:

  • i := 0 — инициализация переменной.
  • i < 5 — условие выполнения.
  • i++ — шаг итерации.

Цикл с только условием

Такой for работает как while в других языках:

i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

// Вывод:
// 0
// 1
// 2
// 3
// 4

Бесконечный цикл

for {
    fmt.Println("Hello, Hexlet")
}

// Вывод:
// Hello, Hexlet
// Hello, Hexlet
// Hello, Hexlet
// Hello, Hexlet
// Hello, Hexlet
// Hello, Hexlet
// Hello, Hexlet
// ...
// Hello, Hexlet

Обычно используется с break или return внутри тела, чтобы остановить выполнение.

Повторение действий с помощью range

В Go существует альтернативный вариант цикла для задачи повторения какого-то действия n раз. Вместо привычного счётчика i := 0; i < n; i++, можно использовать конструкцию for range.

for range 3 {
    fmt.Println("Hello!")
}

// Вывод:
// Hello!
// Hello!
// Hello!

Если понадобится использовать номер итерации, вы можете явно объявить переменную:

for i := range 5 {
    fmt.Println("Итерация номер", i)
}

// Вывод:
// Итерация номер 0
// Итерация номер 1
// Итерация номер 2
// Итерация номер 3
// Итерация номер 4

Такой цикл начинается с 0 и заканчивается на n - 1 — как в обычном счётчике.

Перебор строки посимвольно

Цикл for ... range позволяет пройтись по строке символ за символом. Внутри цикла доступны:

  • Индекс символа.
  • Сам символ в виде rune (Unicode).
text := "go"

for i, r := range text {
    fmt.Printf("Индекс: %d, Символ: %c\n", i, r)
}

// Вывод:
// Индекс: 0, Символ: g
// Индекс: 1, Символ: o

Что делает range?

  • Возвращает индекс текущего элемента (в байтах).
  • Возвращает символ в виде rune — это Unicode-код символа.

Строка в Go — это последовательность байт, но range работает корректно с UTF-8 и возвращает именно символы (а не байты):

word := "го"

for i, r := range word {
    fmt.Println(i, string(r))
}

// Вывод:
// 0 г
// 2 о

Индексы 0 и 2 — потому что символы г и о занимают по два байта каждый.

Если не нужен индекс, его можно опустить с помощью _:

for _, r := range "hexlet" {
    fmt.Printf("%c\n", r)
}

// Вывод:
// h
// e
// x
// l
// e

Цикл range будет особенно полезен при работе с коллекциями (срезами, словарями и т.п.), к которым мы перейдём в следующих уроках.


Дополнительные материалы

  1. For

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff