🐹 Go

Цикл 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 — это мощный инструмент, который помогает автоматизировать повторяющиеся действия. Запомни три главные части: начало, условие, шаг — и ты сможешь решить любую задачу на повторение!