Использование операторов разрыва и продолжения при работе с циклами в Go

Вступление

Использованиеfor loops в Go позволяет эффективно автоматизировать и повторять задачи.

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

Перерыв Заявление

В Go операторbreak завершает выполнение текущего цикла. break почти всегда сочетается сconditional if statement.

Давайте посмотрим на пример, в котором операторbreak используется в циклеfor:

break.go

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            fmt.Println("Breaking out of loop")
            break // break here
        }
        fmt.Println("The value of i is", i)
    }
    fmt.Println("Exiting program")
}

Эта небольшая программа создает циклfor, который будет повторяться, покаi меньше10.

Внутри циклаfor есть операторif. Операторif проверяет условиеi, чтобы узнать, меньше ли значение5. Если значениеi не равно5, цикл продолжается и выводит значениеi. Если значениеi равно5, цикл выполнит операторbreak, напечатает, что этоBreaking out of loop, и прекратит выполнение цикла. В конце программы мы распечатываемExiting program, чтобы показать, что мы вышли из цикла.

Когда мы запустим этот код, наш вывод будет следующим:

OutputThe value of i is 0
The value of i is 1
The value of i is 2
The value of i is 3
The value of i is 4
Breaking out of loop
Exiting program

Это показывает, что, как только целое числоi оценивается как эквивалентное 5, цикл прерывается, поскольку программе предлагается сделать это с помощью оператораbreak.

Вложенные циклы

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

nested.go

package main

import "fmt"

func main() {
    for outer := 0; outer < 5; outer++ {
        if outer == 3 {
            fmt.Println("Breaking out of outer loop")
            break // break here
        }
        fmt.Println("The value of outer is", outer)
        for inner := 0; inner < 5; inner++ {
            if inner == 2 {
                fmt.Println("Breaking out of inner loop")
                break // break here
            }
            fmt.Println("The value of inner is", inner)
        }
    }
    fmt.Println("Exiting program")
}

В этой программе у нас есть две петли. Хотя оба цикла повторяются по 5 раз, в каждом есть условный операторif с операторомbreak. Внешний цикл прервется, если значениеouter равно3. Внутренний цикл прервется, если значениеinner равно2.

Если мы запустим программу, мы увидим вывод:

OutputThe value of outer is 0
The value of inner is 0
The value of inner is 1
Breaking out of inner loop
The value of outer is 1
The value of inner is 0
The value of inner is 1
Breaking out of inner loop
The value of outer is 2
The value of inner is 0
The value of inner is 1
Breaking out of inner loop
Breaking out of outer loop
Exiting program

Обратите внимание, что каждый раз, когда внутренний цикл прерывается, внешний цикл не прерывается. Это потому, чтоbreak нарушит только самый внутренний цикл, из которого он вызывается.

Мы видели, как использованиеbreak останавливает выполнение цикла. Далее, давайте посмотрим, как мы можем продолжить итерацию цикла.

Продолжить заявление

Операторcontinue используется, когда вы хотите пропустить оставшуюся часть цикла, вернуться в начало цикла и продолжить новую итерацию.

Как и операторbreak, операторcontinue обычно используется с условным операторомif.

Используя ту же программу циклаfor, что и в предыдущем разделеBreak Statement, мы будем использовать операторcontinue вместо оператораbreak:

continue.go

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            fmt.Println("Continuing loop")
            continue // break here
        }
        fmt.Println("The value of i is", i)
    }
    fmt.Println("Exiting program")
}

Разница в использовании оператораcontinue, а не оператораbreak, заключается в том, что наш код будет продолжаться, несмотря на сбой, когда переменнаяi будет оценена как эквивалентная5. Давайте посмотрим на наш результат:

OutputThe value of i is 0
The value of i is 1
The value of i is 2
The value of i is 3
The value of i is 4
Continuing loop
The value of i is 6
The value of i is 7
The value of i is 8
The value of i is 9
Exiting program

Здесь мы видим, что строкаThe value of i is 5 никогда не встречается в выводе, но цикл продолжается после этой точки, чтобы напечатать строки для чисел 6-10 перед выходом из цикла.

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

Операторcontinue заставляет программу пропускать определенные факторы, возникающие в цикле, но затем продолжать выполнение остальной части цикла.

Заключение

Операторыbreak иcontinue в Go позволят вам более эффективно использовать циклыfor в вашем коде.