今回はGo言語のswitch文を紹介します。
switch文の基本構成
Go言語のswitch文では、caseに複数の値をカンマで区切って指定することができます。1つのcaseが実行されると自動的にswitch文を終了するため、
caseごとに最後にbreakと記述する必要はありません。
逆に、次のcaseを続けて実行したい場合は、明示的にfallthroughと記述する必要があります。
switch(条件){
case 値 :
処理
・・・
default:
処理
}
case 値 :
処理
・・・
default:
処理
}
- 条件の値とcaseの値が一致すれば、配下の処理が実行されます。
- defaultは、条件の値がどのcaseの値にも一致しない時に実行されます。省略可能ですが書いたほうが良いです。
- case 値の箇所は、case 式とすることもできます。
条件により、振り分け
コードで確認しましょう
package main
import "fmt"
func main() {
var status = "running"
switch status {
case "running":
fmt.Println("実行中")
case "stop":
fmt.Println("停止中")
default:
fmt.Println("不明")
}
}
結果:
実行中
case 分で条件を記述する
package main
import "fmt"
func main() {
var total,cost = 100,90
switch {
case total > cost:
fmt.Println("+++++")
case total < cost:
fmt.Println("-----")
default:
fmt.Println("======")
}
}
結果:
+++++
fallthrough使い方
package main
import "fmt"
func main() {
flag := "1"
switch flag {
case "1":
fmt.Println("1つ目")
fallthrough
case "2":
fmt.Println("2つ目")
default:
fmt.Println("3つ目")
}
}
結果:
1つ目
2つ目
2つ目
caseに複数の値
package main
import "fmt"
func main() {
var flag = 3
switch flag {
case 1:
fmt.Println("running")
case 2, 3, 5, 7:
fmt.Println("error")
default:
fmt.Println("bed flag")
}
}
結果:
error
switch文で変数定義
package main
import (
"fmt"
"runtime"
)
func main() {
switch os := runtime.GOOS; os {
case "linux":
fmt.Println("OS = Linux")
case "windows":
fmt.Println("OS = windows")
default:
fmt.Printf("OS = %s", os)
}
}
結果:
OS = windows
型スイッチ(Type Switch)
package main
import "fmt"
func main() {
var test interface{}
test = 112
switch v := test.(type) {
case nil:
fmt.Println("value is nil")
case int:
fmt.Printf("value is int (%d)\n", v)
case float64:
fmt.Printf("value is float64 (%f)\n", v)
case func(int) string:
fmt.Println("value is function that takes int and returns string")
case bool, string:
fmt.Println("value is bool or string")
default:
fmt.Printf("value has unknown type (%T)\n", v)
}
}
結果:
value is int (112)
型スイッチ (Type Switch)はswitch文の特殊な使用方法で、空インタフェース型(interface{})の変数の実際の型に基いた分岐を行いたいときに使用します。
関数の実装で良く使います。