Оператор for используется для многократного выполнения блока кода.
Трехкомпонентный цикл:
Эта версия for цикла в Go работает так же, как в C или Java.
1 2 3 4 5 |
sum := 0 for i := 1; i < 5; i++ { sum += i } fmt.Println(sum) // 10 (1+2+3+4) |
1. Выполняется инициализирующее утверждение, i := 1
2. Вычисляется условие, i < 5
Если true, тело цикла выполняется,
в противном случае цикл завершен.
3. Выполняется постутверждение i++
4. Вернуться к шагу 2.
Область видимости i ограничена циклом.
Если вы пропустите инициализирующее и постутверждение, вы получите цикл while.
1 2 3 4 5 |
n := 1 for n < 5 { n *= 2 } fmt.Println(n) // 8 (1*2*2*2) |
1. Вычисляется условие, i < 5
Если true, тело цикла выполняется,
в противном случае цикл завершен.
2. Вернуться к шагу 1.
Бесконечный цикл
Если вы пропустите условие, вы получите бесконечный цикл.
1 2 3 4 5 |
sum := 0 for { sum++ // повторяется бесконечно } fmt.Println(sum) // никогда не будет выполнено |
For-each range цикл
Прохождение в цикле по элементам в срезах, массивах, картах, каналах или строках часто лучше сделать с помощью range цикла.
1 2 3 4 |
strings := []string{"hello", "world"} for i, s := range strings { fmt.Println(i, s) } |
Вывод:
0 hello
1 world
Выход из цикла
Ключевые слова break и continue работают так же, как и в C и Java.
1 2 3 4 5 6 7 8 |
sum := 0 for i := 1; i < 5; i++ { if i%2 != 0 { // пропустить нечетные числа continue } sum += i } fmt.Println(sum) // 6 (2+4) |
Оператор continue начинает следующую итерацию самого внутреннего цикла for, выполнив свое постутверждение (i++).
Оператор break покидает самое внутреннее for, switch, select утверждение.
Спасибо, ребят, очень подробно всё объяснили. Буду сейчас пробовать все виды из тех, которые вы мне представили. Надеюсь, я не запутаюсь со всем этим новым багажом знаний)).