Условный оператор switch
Условный оператор switch в Go используется для множественного ветвления кода. Он сравнивает значение выражения с набором значений в блоках case и выполняет первый подходящий блок. В отличие от многих других языков, в Go блоки case не проваливаются автоматически - после выполнения блока выполнение выходит из switch. Первым параметром в switch передается выражение для сравнения, в блоках case указываются значения для сравнения. Также оператор может использоваться без выражения, тогда он проверяет условия в case как логические выражения.
Синтаксис
switch expression {
case value1:
// code
case value2:
// code
default:
// code
}
Блок default выполняется, если ни один из case не совпал. Этот блок необязателен.
Пример
Давайте проверим день недели по его номеру:
package main
import "fmt"
func main() {
day := 3
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
case 4:
fmt.Println("Thursday")
case 5:
fmt.Println("Friday")
default:
fmt.Println("Weekend")
}
}
Результат выполнения кода:
"Wednesday"
В этом примере переменная day содержит число 3, поэтому выполняется блок с case 3.
Пример
Оператор switch может использоваться с несколькими значениями в одном case через запятую:
package main
import "fmt"
func main() {
letter := "b"
switch letter {
case "a", "e", "i", "o", "u":
fmt.Println("Vowel")
default:
fmt.Println("Consonant")
}
}
Результат выполнения кода:
"Consonant"
В этом примере проверяется, является ли буква гласной. Буква b не входит в список гласных, поэтому выполняется блок default.
Пример
Оператор switch без выражения работает как цепочка условий if-else:
package main
import "fmt"
func main() {
num := 42
switch {
case num < 0:
fmt.Println("Negative")
case num == 0:
fmt.Println("Zero")
case num > 0:
fmt.Println("Positive")
}
}
Результат выполнения кода:
"Positive"
Такой синтаксис удобен, когда нужно проверить различные условия без указания конкретного выражения для сравнения.
Пример
В switch можно инициализировать переменную в самом операторе:
package main
import "fmt"
func main() {
switch num := 10; {
case num%2 == 0:
fmt.Println("Even")
default:
fmt.Println("Odd")
}
}
Результат выполнения кода:
"Even"
Переменная num объявлена и инициализирована прямо в операторе switch и доступна только внутри него.
Смотрите также
-
оператор
if,
который выполняет условное ветвление -
оператор
else,
который задает альтернативную ветку дляif -
оператор
fallthrough,
который позволяет проваливаться в следующийcase -
оператор
goto,
который выполняет безусловный переход к метке