English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Выражение switch является многоходовым分支ным выражением. Оно предоставляет эффективный способ перехода к различным частям кода в зависимости от значения выражения (также называемого case). Язык Go поддерживает два типа выражений switch:
Выражение switch
Type switch
Выражение switch подобно switch-выражению в языках C, C++, Java. Оно предоставляет простой способ распределения выполнения между различными частями кода в зависимости от значения выражения.
Грамматика:
switch optstatement; optexpression{ case expression1: Statement.. case expression2: Statement.. ... default: Statement.. }
Важно:
опциональные директивы optstatement и optexpression в выражении switch.
Если одновременно существуютoptstatementиoptpressionТо между ними необходимо использовать точку с запятой (;).
Если в switch нет выражений, то компилятор предполагает, что выражение равно true.
Директива по умолчанию, optstatement, содержит простые директивы, такие как директивы объявления переменных, директивы инкремента или присваивания или вызовы функций и т.д.
Если в директиве по умолчанию есть переменная, то диапазон этой переменной ограничивается этим switch-синтаксисом.
В switch-синтаксисе директивы case и по умолчанию не содержат директив break. Но если вашему программному обеспечению это необходимо, вы можете использовать директивы break и fallthrough.
Директива по умолчанию в switch-синтаксисе является опциональной.
Если один case может содержать несколько значений, и эти значения разделены запятыми (,).
Если в случае нет выражения, то компилятор предполагает, что выражение равно true.
Пример получения дня недели по заданному числу:
package main import "fmt" func main() { // Использование двух типов операторов в switch-синтаксисе, таких как директива по умолчанию, day:=4, и выражения, таких как: day switch day := 4; 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") case 6: fmt.Println("Saturday") case 7: fmt.Println("Sunday") default: fmt.Println("Invalid") } }
Выход:
Thursday
Пример switch-синтаксиса без директивы по умолчанию и выражений:
package main import "fmt" func main() { var value int = 2 // switch-синтаксис без директивы по умолчанию и выражений switch { case value == 1: fmt.Println("Hello") case value == 2: fmt.Println("Bonjour") case value == 3: fmt.Println("Namstay") default: fmt.Println("Invalid") } }
Выход:
Bonjour
Ниже приведен пример switch-синтаксиса без директивы по умолчанию,多个值在case语句中:
package main import "fmt" func main() { var value string = "five" // Пример switch предложения без default, с несколькими значениями в предложении case switch value { case "one": fmt.Println("C#") case "two", "three": fmt.Println("Go") case "four", "five", "six": fmt.Println("Java") } }
Выход:
Java
Когда вы хотите сравнить типы, используйте type switch. В этом switch случае содержат типы, которые нужно сравнить с типами,出现的 в выражении switch.
Грамматика:
switch optstatement; typeswitchexpression{ case typelist 1: Statement.. case typelist 2: Statement.. ... default: Statement.. }
Важно:
Опциональное предложение, то есть optstatement, которое подобно предложению в switch выражении.
Если один case может содержать несколько значений, и эти значения разделены запятыми (,).
В предложении case и default в выражении type switch не содержат никакого предложения break. Но, если это необходимо, можно использовать предложения break и fallthrough.
В предложении default в выражении type switch является опциональным.
expression switch typeЭто выражение, результатом которого является тип.
Если в выражении type switch expression была распределена выражение с помощью оператора =, то тип переменной зависит от типа в предложении case. Если предложение case содержит два или более типов, то тип переменной это тип, который был создан при создании переменной в выражении type switch expression.
package main import "fmt" func main() { var value interface{} switch q := value.(type) { case bool: fmt.Println("Значение типа bool") case float64: fmt.Println("Значение типа float64") case int: fmt.Println("Значение типа int") default: fmt.Printf("Тип значения: %T", q) } }
Выход:
Тип значения: <nil>