Оператор switch
Когда от значения зависит, какой из нескольких блоков кода должен выполниться, оператор switch позволяет выбрать нужный.
Если вы использовали switch в других языках, версия в Go покажется вам знакомой, но с одним отличием: выполняется только совпавший случай. Выполнение не переходит к следующему случаю, поэтому вам не нужно писать break в конце каждого из них.
Синтаксис switch с одним случаем
Go вычисляет выражение switch один раз, а затем сравнивает результат с каждым значением case. Выполняется блок под совпавшим case. Вы также можете добавить необязательный default, чтобы задать код на случай, когда ни один case не подходит.
Синтаксис Switch
switch expression {
case x:
// code block
case y:
// code block
case z:
...
default:
// code block
}
Пример switch с одним случаем
Здесь число обозначает день недели, а switch превращает его в название этого дня. Когда day равно 4, результатом будет Thursday.
Пример
Вывод: Программа на Go и захваченный вывод
package main
import ("fmt")
func main() {
day := 4
switch day {
case 1:
fmt.Println("Понедельник")
case 2:
fmt.Println("Вторник")
case 3:
fmt.Println("Среда")
case 4:
fmt.Println("Четверг")
case 5:
fmt.Println("Пятница")
case 6:
fmt.Println("Суббота")
case 7:
fmt.Println("Воскресенье")
}
}
Ключевое слово default
Если ни один из случаев не подходит, выполняется код под default. В этом примере ни один случай не охватывает значение 8, поэтому выводится сообщение из default.
Пример
Вывод: Программа на Go и захваченный вывод
package main
import ("fmt")
func main() {
day := 8
switch day {
case 1:
fmt.Println("Понедельник")
case 2:
fmt.Println("Вторник")
case 3:
fmt.Println("Среда")
case 4:
fmt.Println("Четверг")
case 5:
fmt.Println("Пятница")
case 6:
fmt.Println("Суббота")
case 7:
fmt.Println("Воскресенье")
default:
fmt.Println("Не день недели")
}
}
Типы случаев должны совпадать
Каждое значение case должно иметь тот же тип, что и выражение switch. Если добавить другой тип, программа не скомпилируется. В этом примере a имеет тип int, поэтому случай со строкой "b" вызывает ошибку.
Пример
Вывод: Программа на Go и захваченный вывод
package main
import ("fmt")
func main() {
a := 3
switch a {
case 1:
fmt.Println("a равно одному")
case "b":
fmt.Println("a равно b")
}
}