В Go, кроме привычного if
, есть ещё одна конструкция ветвления — switch
. Она используется для выбора одного из нескольких возможных путей выполнения кода. На первый взгляд switch
в Go похож на аналогичную конструкцию из других языков (например, C или Java), но его поведение отличается в важных деталях.
x := 10
switch x {
case 10:
fmt.Println("case 10")
default:
fmt.Println("default case")
}
Вывод:
case 10
В этом примере x
сравнивается с каждым case
. Как только находится совпадение, выполняется соответствующий блок, и switch
завершается автоматически — писать break
не нужно. Кроме того, default
не обязан идти последним — он всегда выполняется в последнюю очередь, если не было совпадений.
Можно использовать switch без выражения. В этом случае он работает как if-else if, проверяя условия по порядку:
x := 10
switch {
case x < 0:
fmt.Println("negative")
case x == 0:
fmt.Println("zero")
case x > 0:
fmt.Println("positive")
}
Вывод:
positive
Такой вариант удобен, когда нужно проверить набор условий, а не одно значение.
Ключевое слово fallthrough
В Go по умолчанию не происходит проваливания в следующий case, как это бывает в других языках. Но если вы хотите принудительно продолжить выполнение следующего блока, можно использовать fallthrough
:
x := 10
switch {
case x == 10:
fmt.Println("equal 10 case")
fallthrough
case x < 20:
fmt.Println("less than 20 case")
}
Вывод:
equal 10 case
less than 20 case
Ключевое слово fallthrough
всегда выполняет следующий case, даже если его условие не подходит. Это может привести к неожиданному поведению, поэтому используется редко и осознанно.