Цикл for в Go 1.21: подробное руководство
Цикл for в Go: Повторяем действия без скуки
Введение: Зачем нужны циклы?
Представь, что тебе нужно написать программу, которая выводит на экран фразу «Я учу Go!» 100 раз. Писать 100 раз fmt.Println("Я учу Go!") — это долго и скучно. А если нужно 1000 раз? Тут на помощь приходит цикл — специальная конструкция, которая позволяет повторять одно и то же действие несколько раз.
В языке Go есть только один вид цикла — for. Но он настолько гибкий, что может заменить все виды циклов из других языков. С его помощью ты можешь:
- Вывести на экран числа от 1 до 10
- Повторить фразу нужное количество раз (как в задаче про банкомат)
- Сымитировать работу лифта, который едет с этажа на этаж
- Раздать конфеты одноклассникам по одной (как в задаче про день рождения)
Основной синтаксис цикла for
Самый популярный вид цикла for состоит из трёх частей, разделённых точкой с запятой:
for начальное_значение; условие; изменение {
// тело цикла — то, что будет повторяться
}
Давай разберём на примере. Допустим, мы хотим вывести числа от 1 до 5:
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
Результат в терминале:
1
2
3
4
5
Как это работает?
- i := 1 — создаём переменную-счётчик и даём ей начальное значение 1. Это происходит один раз в самом начале.
- i <= 5 — условие. Перед каждым повторением цикла программа проверяет: «А i всё ещё меньше или равно 5?». Если да — выполняем тело цикла. Если нет — выходим из цикла.
- i++ — после каждого выполнения тела цикла увеличиваем i на 1. Это то же самое, что
i = i + 1.
Таким образом, цикл выполнится ровно 5 раз: когда i = 1, 2, 3, 4, 5. Как только i станет равно 6, условие i <= 5 станет ложным, и цикл закончится.
Разбор типичных задач
Задача 1: «Банкомат» — повторение фразы N раз
Представь, что банкомат просит пользователя повторить фразу «Введите пароль» 3 раза. Давай напишем программу, которая выводит эту фразу заданное количество раз.
package main
import "fmt"
func main() {
var n int
fmt.Print("Сколько раз повторить фразу? ")
fmt.Scan(&n)
for i := 1; i <= n; i++ {
fmt.Println("Введите пароль")
}
}
Пример работы:
Сколько раз повторить фразу? 3
Введите пароль
Введите пароль
Введите пароль
Обрати внимание: мы используем переменную n, которую вводит пользователь. Цикл выполнится ровно столько раз, сколько укажет пользователь.
Задача 2: «Лифт» — вывод этажей от 1 до N
Ты зашёл в лифт на нулевом этаже и хочешь подняться на 5-й. Дисплей лифта показывает каждый этаж, мимо которого проезжает лифт.
package main
import "fmt"
func main() {
var targetFloor int
fmt.Print("На какой этаж едем? ")
fmt.Scan(&targetFloor)
fmt.Println("Лифт поехал!")
for floor := 1; floor <= targetFloor; floor++ {
fmt.Printf("Этаж %d\n", floor)
}
fmt.Println("Приехали!")
}
Пример работы:
На какой этаж едем? 4
Лифт поехал!
Этаж 1
Этаж 2
Этаж 3
Этаж 4
Приехали!
Задача 3: «День рождения» — раздача конфет по одной
У тебя есть 10 конфет, и ты хочешь раздать их одноклассникам по одной. Каждый раз ты говоришь: «Возьми конфету!».
package main
import "fmt"
func main() {
candies := 10
for i := 1; i <= candies; i++ {
fmt.Printf("Конфета №%d: Возьми конфету!\n", i)
}
fmt.Println("Конфеты закончились!")
}
Результат:
Конфета №1: Возьми конфету!
Конфета №2: Возьми конфету!
...
Конфета №10: Возьми конфету!
Конфеты закончились!
Частые ошибки новичков
- Бесконечный цикл: Самая популярная ошибка — забыть изменить счётчик. Например, написать
for i := 1; i <= 5; { }и забыть проi++. Программа будет работать вечно, и её придётся аварийно завершать. - Перепутать знаки:
<вместо<=. Если написатьi < 5, цикл выполнится 4 раза (i = 1,2,3,4), а не 5. Будь внимателен! - Старт с нуля: Если начать счётчик с 0 (
i := 0) и условиеi < n, то цикл выполнится n раз, но счётчик будет идти от 0 до n-1. Это не ошибка, но нужно помнить, что числа будут другими. - Забыть про fmt.Scan: В задачах, где количество повторений вводит пользователь, нужно обязательно считать значение командой
fmt.Scan(&переменная).
Итоговый пример: «Поднятие мотивации»
Представь, что ты решил сделать сегодня 7 упражнений. Тренер просит тебя говорить номер каждого упражнения вслух.
package main
import "fmt"
func main() {
var exercises int
fmt.Print("Сколько упражнений ты сегодня сделаешь? ")
fmt.Scan(&exercises)
fmt.Println("Начинаем тренировку!")
for i := 1; i <= exercises; i++ {
fmt.Printf("Упражнение %d: Делаю!\n", i)
}
fmt.Println("Тренировка завершена! Молодец!")
}
Пример работы:
Сколько упражнений ты сегодня сделаешь? 3
Начинаем тренировку!
Упражнение 1: Делаю!
Упражнение 2: Делаю!
Упражнение 3: Делаю!
Тренировка завершена! Молодец!
Цикл for — это мощный инструмент, который помогает автоматизировать повторяющиеся действия. Запомни три главные части: начало, условие, шаг — и ты сможешь решить любую задачу на повторение!