Циклический перебор данных с помощью выражений for

Завершено

Еще одним распространенным потоком управления является цикл. Go использует только одну циклическую конструкцию, которой является цикл for. Однако циклы можно представить более чем одним способом. В этой части вы узнаете, какие шаблоны циклов поддерживаются в Go.

Базовый синтаксис цикла for

Подобно операторам if и switch, выражения цикла for не нуждаются в круглых скобках. Однако фигурные скобки указывать обязательно.

Точки с запятой (;) разделяют три компонента циклов for:

  • Начальный оператор, который выполняется перед первой итерацией (необязательно).
  • Выражение условия, которое вычисляется перед каждой итерацией. Когда это условие равно false, цикл останавливается.
  • Конечный оператор, который выполняется в конце каждой итерации (необязательно).

Как мы видим, цикл for в Go похож на цикл for в таких языках программирования, как C, Java и C#.

В простейшей форме цикл for в Go выглядит следующим образом:

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("sum of 1..100 is", sum)
}

Давайте рассмотрим другие варианты написания циклов в Go.

Пустые начальные и конечные операторы

В некоторых языках программирования ключевое слово while можно использовать для написания шаблонов циклов, где необходимо только выражение условия. В языке Go ключевого слова while нет. Но вы можете использовать цикл вместо этого и воспользоваться тем фактом for , что Go делает предварительные данные и постстаты необязательными.

Используйте приведенный ниже фрагмент кода, чтобы убедиться в возможности применить цикл for, не используя начальные и конечные операторы.

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int64
    rand.Seed(time.Now().Unix())
    for num != 5 {
        num = rand.Int63n(15)
        fmt.Println(num)
    }
}

Если переменная num содержит значение, отличное от 5, программа выводит случайное число.

Бесконечные циклы и операторы break

Еще одним шаблоном цикла, который можно записать в Go, является бесконечный цикл. В этом случае вам не понадобится писать выражение условия или начальный или конечный оператор. Вместо этого путь будет считываться с цикла. Если этого не сделать, логика никогда не выйдет из цикла. Чтобы логика могла выйти из цикла, используйте ключевое слово break.

Чтобы написать правильный бесконечный цикл, добавьте к ключевому слову for фигурные скобки, как показано ниже:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int32
    sec := time.Now().Unix()
    rand.Seed(sec)

    for {
        fmt.Print("Writing inside the loop...")
        if num = rand.Int31n(10); num == 5 {
            fmt.Println("finish!")
            break
        }
        fmt.Println(num)
    }
}

При каждом выполнении этого кода вы будете получать другие выходные данные.

Операторы continue

В Go для пропуска текущей итерации цикла можно использовать ключевое слово continue. Это ключевое слово можно использовать, например, чтобы выполнять проверку перед продолжением цикла. Или, когда при написании бесконечного цикла необходимо ждать, пока ресурс не станет доступным.

В этом примере используется ключевое слово continue:

package main

import "fmt"

func main() {
    sum := 0
    for num := 1; num <= 100; num++ {
        if num%5 == 0 {
            continue
        }
        sum += num
    }
    fmt.Println("The sum of 1 to 100, but excluding numbers divisible by 5, is", sum)
}

Этот пример содержит цикл for, который выполняет итерацию от 1 до 100, добавляя во время каждой итерации к сумме текущее число. Каждое число, кратное 5, пропускается в текущей итерации цикла и не добавляется к сумме.