Оператор fallthrough
Оператор fallthrough используется внутри конструкции
switch для передачи управления следующему случаю
после выполнения текущего. В отличие от многих других языков,
в Go случаи в switch не проваливаются автоматически -
для проваливания нужно явно использовать оператор
fallthrough. Он применяется, когда необходимо выполнить
код сразу для нескольких связанных случаев.
Синтаксис
fallthrough
Оператор ставится внутри блока случая и должен быть последним оператором в этом блоке.
Пример с одним fallthrough
Давайте рассмотрим базовый пример использования
fallthrough в конструкции switch:
package 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")
}
}
Результат выполнения кода:
"two"
"three"
Как видите, после выполнения случая 2 управление
перешло к следующему случаю 3 из-за оператора
fallthrough.
Пример без fallthrough
Если не использовать fallthrough, то после выполнения
случая выполнение конструкции switch завершается:
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
}
Результат выполнения кода:
"two"
Пример с несколькими fallthrough
Оператор fallthrough можно использовать несколько раз
подряд, чтобы пройти через несколько случаев:
package 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")
}
}
Результат выполнения кода:
"one"
"two"
"three"
Ограничения fallthrough
Оператор fallthrough нельзя использовать в последнем
случае switch, так как после него нет следующего случая.
Также fallthrough не работает в случае, если
он не является последним оператором в блоке:
package 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")
}
}
Результат выполнения кода:
"two"
"three"
Пример с fallthrough в switch с условиями
Рассмотрим пример использования fallthrough
в switch с условиями сравнения:
package 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")
}
}
Результат выполнения кода:
"less than 20"
"less than 30"