Go за Прикладом: Оператори Розгалуження (Switch)

Оператор розгалуження switch використовують, як правило, для представлення у вигляді розгалуження умов.

package main
import (
    "fmt"
    "time"
)
func main() {

Розглянемо базовий приклад switch.

    i := 2
    fmt.Print("Напишемо ", i, " як ")
    switch i {
    case 1:
        fmt.Println("один")
    case 2:
        fmt.Println("два")
    case 3:
        fmt.Println("три")
    }

Дозволяється використовувати коми (“,”) - так ми розділяємо кілька умов в одній гілці case. Також існує умова default - вона відбудеться, за умови що жодна інша умова ще не виконалась.

    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("Це вихідні")
    default:
        fmt.Println("Це робочий день")
    }

switch без виразу - представляє собою альтернативний спосіб реалізувати if/else логіку. Цей приклад демонструє, що гілки case не обмежується константами.

    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("Над полудень")
    default:
        fmt.Println("По полудні")
    }

Так само - як і в попередньому прикладі з if, оператор switch дозволяє декларувати змінну, яка буде доступна на усіх гілках перевірки умови. Наразі, ми демонструємо це - визначенням типу вхідної змінної (тип interface{} дозволяє працювати з будь-яким типом даних).

    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("Я логічна змінна")
        case int:
            fmt.Println("Я ціле число")
        default:
            fmt.Printf("Не знаю нічого про тип %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
}
$ go run switch.go 
Write 2 as two
It's a weekday
It's after noon
I'm a bool
I'm an int
Don't know type string

Наступний приклад: Масиви.