Go Em Exemplos: Switch

Declarações Switch são geralmente utilizadas para condicionais com muitas ramificações.

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

Aqui está um switch básico.

    i := 2
    fmt.Print("Imprima ", i, " como ")
    switch i {
    case 1:
        fmt.Println("um")
    case 2:
        fmt.Println("dois")
    case 3:
        fmt.Println("três")
    }

Vírgulas podem ser utilizadas para separar múltiplas expressões na mesma declaração case. A utilização de default é opcional.

    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("É fim de semana")
    default:
        fmt.Println("É dia de semana")
    }

switch sem nenhuma expressão é um meio alternativo para representar a lógica if/else. Aqui também é exibido como as expressões case podem ser não constantes.

    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("É antes do meio-dia")
    default:
        fmt.Println("É depois do meio-dia")
    }

Um switch de tipos compara tipos ao invés de valores. É possível utilizá-lo para descobrir o valor de um tipo interface. Neste exemplo, a variável t terá o tipo correspondente à sua cláusula.

    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("Sou um booleano")
        case int:
            fmt.Println("Sou um inteiro")
        default:
            fmt.Printf("Não sei o meu tipo %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
}
$ go run switch.go 
Imprima 2 como dois
É fim de semana
É depois do meio-dia
Sou um booleano
Sou um inteiro
Não sei o meu tipo string

Próximo exemplo: Arrays.