Цикл for
Цикл в Go — это способ многократно выполнить один и тот же блок кода без копипасты, управляя числом повторений через счётчик и условие.
Структура цикла for
Базовый синтаксис:
for init; condition; post {
// тело цикла
}
init— инициализация счётчика (обычноi := 0илиi := 1).condition— условие продолжения цикла (i <= 5,i < 10).post— приращение счётчика (i++,i += 2,i--).
Пример:
for i := 1; i <= 5; i++ {
fmt.Printf("%d ", i)
}
Область видимости счётчика
Если счётчик объявлен в init:
for i := 10; i <= 12; i++ {
fmt.Printf("i = %d\n", i)
}
// Здесь i уже недоступна
Переменная i видна только внутри цикла. Если нужно использовать её снаружи — объявляйте до цикла:
i := 0
for ; i < 3; i++ {
fmt.Println(i)
}
// Здесь i доступна
Разные шаги и направления
Приращение можно настраивать:
// Шаг +1
for i := 0; i < 5; i++ {}
// Шаг +2
for i := 0; i < 10; i += 2 {}
// Шаг -1 (обратный отсчёт)
for i := 5; i >= 1; i-- {}
Go не имеет отдельного «цикла вниз» — направление задаётся стартовым значением, условием и шагом.
Вариации синтаксиса
Можно опускать части заголовка:
// Без init (i объявлена заранее)
i := 0
for ; i < 3; i++ {
fmt.Println(i)
}
// Без post (приращение внутри тела)
for j := 0; j < 3; {
fmt.Println(j)
j++
}
Главное — чтобы на каждой итерации условие в condition в какой‑то момент стало ложным, иначе будет бесконечный цикл.
Вложенные циклы
Один цикл можно разместить внутри другого:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
product := i * j
fmt.Printf("%d*%d=%d ", i, j, product)
}
fmt.Println()
}
Внешний цикл управляет строками, внутренний — столбцами. Такое часто используется для таблиц, матриц, комбинаторики.
Практика: сумма чисел
Пример использования цикла для накопления результата:
sum := 0
for i := 1; i <= 10; i++ {
sum += i
fmt.Printf("i=%d, sum=%d\n", i, sum)
}
fmt.Printf("Итого: %d\n", sum)
Цикл — оператор, внутри которого можно использовать другие операторы (включая циклы). Чтобы понимать поведение сложных (особенно вложенных) циклов, полезно прогонять код пошагово в дебаггере и на каждой итерации отслеживать значения счётчиков и накопленных переменных.