Перейти к основному содержимому
Модуль 2 · Урок 2 из 57/50 в курсе~10 min
Уроки модуля (2/5)

for: единственный цикл

В Go есть конструкция с одним циклом: for. Нет while, нет do-while, нет foreach (который появится на следующем уроке с range). Одно ключевое слово охватывает все случаи благодаря трем формам.

Три формы for

Классическая трехпредставительная форма.

Идентичен C/Java:

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

i имеет область действия, ограниченную for. Эти три пункта являются необязательными (вы можете опустите любой из них), но ; останется, если вы опустите промежуточный.

Форма «пока»: только условие

В Go while — это просто for с одним выражением bool:

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

Бесконечная форма

Без предложений цикл никогда не завершается (если только break/return):

Go
for {
    if exitCondition() {
        break
    }
    doWork()
}

Это шаблон для циклов обработки событий, серверов и политик повторных попыток.

break, continue и метки

break выходит из самого внутреннего цикла, continue переходит к следующей итерации:

Go
for i := 0; i < 10; i++ {
    if i%2 == 0 {
        continue       // salta i pari
    }
    if i > 7 {
        break          // ferma il ciclo
    }
    fmt.Println(i)     // 1 3 5 7
}

Для выхода из вложенных циклов есть метки (редко, но полезно):

Go
Esterno:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i*j == 4 {
            break Esterno   // esce da entrambi
        }
    }
}

Нет оператора ,, как в C.

В Go вы не можете написать for i, j := 0, 10; i < j; i, j = i+1, j-1: выражение post не принимает множественные присваивания. Используйте Go синтаксис множественного присваивания:

Go
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
    fmt.Println(i, j)
}

Вместо этого это работает, поскольку i, j = i+1, j-1 — это одиночный множественное задание.

Попробуйте это

Упражнение#go.m2.l2.e1
Попыток: 0Загрузка…

Выведите числа от 0 до 4 включительно с помощью классического трехпредставительного предложения for.

Загрузка редактора…
Показать подсказку

`для инициализации; конд; post { ... }` — здесь init равен `i := 0`.

Решение доступно после 3 попыток

Упражнение#go.m2.l2.e2
Попыток: 0Загрузка…

Суммируйте все числа от 1 до 10 включительно, используя форму for.

Загрузка редактора…
Показать подсказку

Форма 'пока': `for &lt;условие&gt; { ... }`.

Решение доступно после 3 попыток

Quiz#go.m2.l2.e3
Готово

Какая форма представляет бесконечный цикл в Go?

Go
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }
Варианты ответа

Резюме

– Одно ключевое слово for в трех формах: классическая, пока, бесконечная.

  • break / continue опционально с меткой для вложенных циклов. – Метка Name: перед for, используется экономно.
  • Нет , в качестве оператора: используйте множественное присвоение i, j = ..., ....