tgoop.com/golangtests/380
Last Update:
📌 Уроки Golang с нуля /#13 - Оператор Switch.
Вышел Новый урок из нашего курса, в нем мы поговорим о Операторе Switch в Go.
Оператор switch обычно используется для описания действий, выполняемых программой в тех случаях, когда переменной назначаются определенные значения. Следующий пример показывает, как в подобной ситуации можно использовать операторы if:
Пять паттернов использования операторов switch
Базовый switch с default кейсом
▪Оператор switch запускает первый case (кейс), равный выражению условия.
▪Кейсы оцениваются сверху вниз, останавливаясь, когда кейс подходит.
▪Если ни один кейс не совпадает и есть default кейс, выполняются его утверждения.switch time.Now().Weekday() {
case time.Saturday:
fmt.Println("Сегодня суббота.")
case time.Sunday:
fmt.Println("Сегодня воскресенье.")
default:
fmt.Println("Сегодня будничный день.")
}
В отличие от C и Java, выражения case не обязательно должны быть константами.
Без выражения условия
Switch без условия аналогичен switch true.// пропущенное выражение условия означает "true"
switch hour := time.Now().Hour(); {
case hour < 12:
fmt.Println("Доброе утро!")
case hour < 17:
fmt.Println("Добрый день!")
default:
fmt.Println("Добрый вечер!")
}
Кейс - список
В Go в качестве кейса можно использовать список значений - если выражение условия совпадает с одним из элементов списка, тогда кейс считается совпавшим:func WhiteSpace(c rune) bool {
switch c {
case ' ', '\t', '\n', '\f', '\r':
return true
}
return false
}
Fallthrough (проваливание в следующий кейс)
Оператор fallthrough передает управление следующему кейсу.
Он может использоваться только как заключительное утверждение в выражениях кейса.switch 2 {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
fallthrough
case 3:
fmt.Println("3")
}
Вывод:
2
3
Выход с break
Оператор break завершает выполнение самого внутреннего оператора for, switch или select.
Если вам нужно выйти из окружающего цикла, а не из switch, вы можете поместить метку в цикл и перейти к этой метке. Следующий пример показывает оба варианта использования.Loop:
for _, ch := range "a b\nc" {
switch ch {
case ' ': // пропускаем пробел
break
case '\n': // break на newline символе
break Loop
default:
fmt.Printf("%c\n", ch)
}
}
Вывод:
a
b
На символе a выполняется default кейс. На пробеле оператор break производит выход из switch. Далее на символе b выполняется default кейс. Далее на символе новой строки (newline - \n) происходит выход к метке Loop и выход из for range цикла.
Порядок исполнения
Сначала выражение switch оценивается один раз.
Затем case выражения оцениваются слева направо и сверху вниз:
первое, равное выражению switch, запускает выполнение операторов соответствующего case,
другие case пропущены.
// Foo печатает и возвращает n.
func Foo(n int) int {
fmt.Println(n)
return n
}
func main() {
switch Foo(2) {
case Foo(1), Foo(2), Foo(3):
fmt.Println("Первый case")
fallthrough
case Foo(4):
fmt.Println("Второй case")
}
}
Вывод:2
1
2
Первый case
Второй case
Gonews