Go言語のSwitch文について

Go言語のswitch Go

今回はGo言語のswitch文を紹介します。

switch文の基本構成

Go言語のswitch文では、caseに複数の値をカンマで区切って指定することができます。1つのcaseが実行されると自動的にswitch文を終了するため、
caseごとに最後にbreakと記述する必要はありません。
逆に、次のcaseを続けて実行したい場合は、明示的にfallthroughと記述する必要があります。

switch(条件){
  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つ目

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{})の変数の実際の型に基いた分岐を行いたいときに使用します。
関数の実装で良く使います。

コメント

タイトルとURLをコピーしました