Оператор fallthrough

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

Синтаксис

gofallthrough

Оператор ставится внутри блока случая и должен быть последним оператором в этом блоке.

Пример с одним fallthrough

Давайте рассмотрим базовый пример использования fallthrough в конструкции switch:

gopackage main

import "fmt"

func main() {
  num := 2

  switch num {
  case 1:
    fmt.Println("one")
  case 2:
    fmt.Println("two")
    fallthrough
  case 3:
    fmt.Println("three")
  }
}

Результат выполнения кода:

go"two"
"three"

Как видите, после выполнения случая 2 управление перешло к следующему случаю 3 из-за оператора fallthrough.

Пример без fallthrough

Если не использовать fallthrough, то после выполнения случая выполнение конструкции switch завершается:

gopackage main

import "fmt"

func main() {
  num := 2

  switch num {
  case 1:
    fmt.Println("one")
  case 2:
    fmt.Println("two")
  case 3:
    fmt.Println("three")
  }
}

Результат выполнения кода:

go"two"

Пример с несколькими fallthrough

Оператор fallthrough можно использовать несколько раз подряд, чтобы пройти через несколько случаев:

gopackage main

import "fmt"

func main() {
  num := 1

  switch num {
  case 1:
    fmt.Println("one")
    fallthrough
  case 2:
    fmt.Println("two")
    fallthrough
  case 3:
    fmt.Println("three")
  }
}

Результат выполнения кода:

go"one"
"two"
"three"

Ограничения fallthrough

Оператор fallthrough нельзя использовать в последнем случае switch, так как после него нет следующего случая. Также fallthrough не работает в случае, если он не является последним оператором в блоке:

gopackage main

import "fmt"

func main() {
  num := 2

  switch num {
  case 1:
    fmt.Println("one")
  case 2:
    fmt.Println("two")
    fallthrough
    // Этот код после fallthrough не выполнится
    fmt.Println("after fallthrough")
  case 3:
    fmt.Println("three")
  }
}

Результат выполнения кода:

go"two"
"three"

Пример с fallthrough в switch с условиями

Рассмотрим пример использования fallthrough в switch с условиями сравнения:

gopackage main

import "fmt"

func main() {
  value := 10

  switch {
  case value < 5:
    fmt.Println("less than 5")
  case value < 10:
    fmt.Println("less than 10")
  case value < 20:
    fmt.Println("less than 20")
    fallthrough
  case value < 30:
    fmt.Println("less than 30")
  }
}

Результат выполнения кода:

go"less than 20"
"less than 30"

Смотрите также

  • конструкцию switch,
    которая используется для множественного выбора
  • конструкцию if,
    которая выполняет код при выполнении условия
  • конструкцию else,
    которая выполняется при ложном условии
  • оператор break,
    который прерывает выполнение цикла или switch