Уроки модуля (2/5)
for: единственный цикл
В Go есть конструкция с одним циклом: for. Нет while, нет
do-while, нет foreach (который появится на следующем уроке с
range). Одно ключевое слово охватывает все случаи благодаря трем формам.
Три формы for
Классическая трехпредставительная форма.
Идентичен C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i имеет область действия, ограниченную for. Эти три пункта являются необязательными (вы можете
опустите любой из них), но ; останется, если вы опустите промежуточный.
Форма «пока»: только условие
В Go while — это просто for с одним выражением bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Бесконечная форма
Без предложений цикл никогда не завершается (если только break/return):
for {
if exitCondition() {
break
}
doWork()
}Это шаблон для циклов обработки событий, серверов и политик повторных попыток.
break, continue и метки
break выходит из самого внутреннего цикла, continue переходит к следующей итерации:
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
}Для выхода из вложенных циклов есть метки (редко, но полезно):
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
синтаксис множественного присваивания:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}Вместо этого это работает, поскольку i, j = i+1, j-1 — это одиночный
множественное задание.
Попробуйте это
Выведите числа от 0 до 4 включительно с помощью классического трехпредставительного предложения for.
Показать подсказку
`для инициализации; конд; post { ... }` — здесь init равен `i := 0`.
Решение доступно после 3 попыток
Суммируйте все числа от 1 до 10 включительно, используя форму for.
Показать подсказку
Форма 'пока': `for <условие> { ... }`.
Решение доступно после 3 попыток
Какая форма представляет бесконечный цикл в Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Резюме
– Одно ключевое слово for в трех формах: классическая, пока, бесконечная.
break/continueопционально с меткой для вложенных циклов. – МеткаName:передfor, используется экономно.- Нет
,в качестве оператора: используйте множественное присвоениеi, j = ..., ....