Введение

Как язык программирования, Go поддерживает оператор переключения для реализации условий в нескольких ветвях. Оператор switch — это мощный инструмент для выбора одного из нескольких блоков кода для выполнения на основе значения выражения. Он обеспечивает краткий способ написания сложных операторов if/else и делает код более читабельным и удобным для сопровождения.

Основной синтаксис

Вот базовый оператор switch в Go:

switch i {
case 1:
    // code block to execute when i is 1
case 2:
    // code block to execute when i is 2
default:
    // code block to execute when i is neither 1 nor 2
}

В этом примере оператор switch берет переменную i и сравнивает ее с другими значениями, используя операторы case. Если значение i соответствует любому из операторов case, выполняется соответствующий блок кода. Если ни один из операторов case не соответствует значению i, выполняется блок кода по умолчанию.

Несколько выражений

Вы также можете использовать запятые для разделения нескольких выражений в одном операторе case:

switch i {
case 1, 2, 3:
    // code block to execute when i is 1, 2 or 3
default:
    // code block to execute when i is neither 1, 2 nor 3
}

В этом примере кодовый блок выполняется, когда i равно 1, 2 или 3. Если i не равно ни одному из этих значений, выполняется кодовый блок по умолчанию.

Пропуск выражений

Операторы Switch также могут использоваться без выражения для выражения логики if/else. Вот пример:

t := time.Now()
switch {
case t.Hour() < 12:
    fmt.Println("It's before noon")
default:
    fmt.Println("It's after noon")
}

В этом примере оператор switch сравнивает результат t.Hour() с 12. Если результат меньше 12, выполняется кодовый блок fmt.Println("It's before noon"). Если результат равен или больше 12, выполняется кодовый блок fmt.Println("It's after noon").

Неконстантные выражения

Операторы switch также могут использовать неконстантные выражения в предложениях case. Вот пример:

func whatAmI(i interface{}) {
    switch t := i.(type) {
    case bool:
        fmt.Println("I'm a bool")
    case int:
        fmt.Println("I'm an int")
    default:
        fmt.Printf("Don't know type %T\n", t)
    }
}
whatAmI(true)
whatAmI(1)
whatAmI("hey")

В этом примере оператор switch принимает значение интерфейса i и использует переключатель типа для определения типа i во время выполнения. Если i является bool, выполняется кодовый блок fmt.Println("I'm a bool"). Если i является int, выполняется кодовый блок fmt.Println("I'm an int"). Если i любого другого типа, выполняется кодовый блок fmt.Printf("Don't know type %T\n", t).

Переключатели типа можно использовать для определения типа значения интерфейса. Переменная t будет иметь тип, соответствующий ее предложению.

Заключение

Операторы Switch в Go предоставляют гибкий и лаконичный способ написания условных выражений для нескольких ветвей. Их можно использовать с постоянными и непостоянными выражениями, а также для реализации переключателей типов. Используйте их в своем коде Go, чтобы сделать его более читабельным и удобным в сопровождении.

Удачного кодирования!