Switch

Switch statements thể hiện nhiều điều kiện qua nhiều nhánh.

Dưới đây là một switch cơ bản:

package main

import "fmt"

func main() {
    i := 2
    fmt.Print("Write ", i, " as ")
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }

Bạn có thể sử dụng dấu , để phân tách nhiều biểu thức trong cùng một case
Ở ví dụ này chúng ta cũng sẽ sử dụng cả trường hợp default

    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's a weekday")
    }

switch mà không có biểu thức thì cũng được coi như là 1 cách để thay thế cho việc thể hiện if/else

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

Một kiểu switch so sánh các kiểu dữ liệu thay vì so sánh các giá trị. Có thể sử dụng kiểu này để biết được kiểu giá trị của một interface.
Trong ví dụ này, biến t sẽ có kiểu tương đương với mệnh đề của nó.

    whatAmI := func(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")
}
 







$ 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