4.1 KiB
title | localeTitle |
---|---|
Switch in Go | Включить Go |
Включить Go
Оператор переключения Go является альтернативой if
. Он использует следующий синтаксис:
fruit := "apple"
switch fruit {
case "banana":
fmt.Printf("Yellow and long.")
case "apple":
fmt.Printf("Red and round.")
case "lemon":
fmt.Printf("Yellow and round.")
}
Выход этой программы будет Red and round.
,
Сначала мы объявляем переменную fruit
как apple
. Затем мы используем переменную fruit
как выражение условия. Go сравнивает ценность fruit
с такими cases
как:
- плод == "банан" (ложный)
- фрукты == "яблоко" (правда)
Уведомление о lemon
не было проверено. После того, как оценка вернётся, больше не рассматриваются случаи.
Как и в if
, вы можете объявлять временные переменные в выражении условия switch:
switch fruit := "apple"; fruit {
case "banana":
fmt.Printf("Yellow and long.")
case "apple":
fmt.Printf("Red and round.")
case "lemon":
fmt.Printf("Yellow and round.")
}
Переменные fruit
не будут доступны за пределами оператора switch.
Стандартные и другие случаи
По умолчанию
Ключевое слово по default
- это случай падения, когда другие случаи не возвращают true:
switch fruit := "grape"; fruit {
case "banana":
fmt.Printf("Yellow and long.")
case "apple":
fmt.Printf("Red and round.")
case "lemon":
fmt.Printf("Yellow and round.")
default:
fmt.Printf("New fruit: %s!", fruit)
}
Результатом этой программы будет New fruit: grape!
,
То же действие для разных значений
Список значений, разделенных запятыми, для сравнения значения выражения условия с тем же действием.
switch fruit := "lemon"; fruit {
case "banana", "lemon":
fmt.Printf("Yellow fruit.")
default:
fmt.Printf("This fruit is a color different than yellow.")
}
Выход: Yellow fruit.
,
Без выражения
Переключатель без выражения означает, что значение switch true
. Это альтернативная версия в цепочке else-if.
fruit := "banana"
switch {
case fruit == "banana":
fmt.Printf("Yellow and long.")
default:
fmt.Printf("This is not a banana.")
}
Это оценивает значение true == (fruit == "banana")
, упрощенное к true == true
, которое возвращает true.
Перерыв
Вы можете сломать код в инструкции switch, чтобы пропустить код.
appleColor := "green"
switch fruit := "apple"; fruit {
case "banana":
fmt.Printf("Yellow and long.")
case "apple":
if appleColor == "green" {
fmt.Printf("This apple is green!")
break
}
fmt.Printf("This apple is tasty!")
case "lemon":
fmt.Printf("Yellow and round.")
}
Выход: This apple is green!
,
Провалиться
Переходите к следующему случаю, оценивает ли его условие значение true.
switch fruit := "banana"; fruit {
case "banana":
fmt.Printf("Yellow and long.")
fallthrough
case "apple":
fmt.Printf("Red and round.")
case "lemon":
fmt.Printf("Yellow and round.")
}
Выход: Yellow and long.
И Red and round.
,