English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Golang

Контрольные операторы Golang

Функции и методы Golang

Структуры Golang

Срезы и массивы Golang

Строки (String) Golang

Пункторы Golang

Интерфейсы Golang

Конкурентоспособность Golang

Ошибка (Error) Golang

Другие темы Golang

Оператор Switch языка Go

Выражение switch является многоходовым分支ным выражением. Оно предоставляет эффективный способ перехода к различным частям кода в зависимости от значения выражения (также называемого case). Язык Go поддерживает два типа выражений switch:

  1. Выражение switch

  2. Type switch

Выражение 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

Когда вы хотите сравнить типы, используйте 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>