背景

Javaで散々苦しんだswitch文、Goにも出てきたのでまとめます

環境

go version go1.14.4
windows10

まとめ

JavaとGoのswitch文の大きな違い

Java

条件に合致した際に次の処理を実施しないようにするにはbreakが必要

Go

条件に合致したら次の処理は実施されない。
実施したい場合はfallthroughを入れる必要がある
※型でのswitchの場合は使用できない

ソースと実行例

main.go
package main

import (
    "fmt"
)

// 型アサーションを用いたスイッチの使用例
func main() {

    // 変数aをすべての型を取れるinterface{}型として定義し、999.999を入れる
    var a interface{} = 999.999

    // aの型でswitchする
    // [変数名].(type)で型が取得できる
    switch a.(type) {
    case bool:
        fmt.Printf("bool")
    case int, uint:
        fmt.Printf("int or uint")
    case string:
        fmt.Printf("string")
    case float64:
        fmt.Printf("float")
    case rune:
        fmt.Printf("rune")
    default:
        fmt.Println("don't know")
    }
}

実行例

C:\go>go run main.go
float

999.999はfloat64の型に入るのでその出力。
後の実装のrune, defaultは実行されない。