Go言語でcase文の書き方

Go言語でcase文の書き方

Go言語のcase文は、switch文の一部として使用されます。
switch文は、条件に基づいて複数のケースから一つを選択して処理を実行するための構文です。
switch文の各ケースは、プログラムの流れを分岐させるために使います。
以下に、Go言語でのcase文の書き方について詳細に説明します。

基本的な構文

Go言語のswitch文は以下のように書きます。

switch 式 {
case1:
  // 値1にマッチした場合の処理
case2:
  // 値2にマッチした場合の処理
default:
  // どのcaseにもマッチしなかった場合の処理
}

ここで、式は比較対象となる値や式で、各caseはその値と一致する場合に実行される処理を指定します。
defaultは省略可能で、どのcaseにもマッチしなかった場合に実行される処理を指定します。

例: 基本的なswitch文

以下に、簡単な例を示します。
この例では、dayという変数の値に基づいて異なる曜日のメッセージを表示します。

package main

import "fmt"

func main() {
  day := 3

  switch day {
  case 1:
    fmt.Println("月曜日")
  case 2:
    fmt.Println("火曜日")
  case 3:
    fmt.Println("水曜日")
  case 4:
    fmt.Println("木曜日")
  case 5:
    fmt.Println("金曜日")
  case 6:
    fmt.Println("土曜日")
  case 7:
    fmt.Println("日曜日")
  default:
    fmt.Println("無効な日付")
  }
}

このプログラムでは、dayが3なので、"水曜日"が表示されます。

複数の値を持つケース

case文では、一つのcaseに複数の値を指定することもできます。
これにより、複数の値に対して同じ処理を実行することができます。

switch day {
case 1, 7:
  fmt.Println("週末")
case 2, 3, 4, 5, 6:
  fmt.Println("平日")
default:
  fmt.Println("無効な日付")
}

この例では、dayが1または7の場合に「週末」と表示され、2から6の場合には「平日」と表示されます。

式なしのswitch

switch文では、式を省略することもできます。
この場合、switch文の中で使用する変数や値に基づいて処理を分岐します。
switchはデフォルトでtrueとして扱われるため、各caseは真偽値の評価によって処理が決まります。

package main

import "fmt"

func main() {
  x := 10

  switch {
  case x < 0:
    fmt.Println("負の数")
  case x == 0:
    fmt.Println("ゼロ")
  case x > 0:
    fmt.Println("正の数")
  }
}

この例では、xの値が10なので「正の数」と表示されます。
switch文には式がないため、各caseの条件式が評価されます。

fallthroughの使用

Go言語のswitch文にはfallthroughというキーワードがあり、次のcaseに処理を継続させることができます。
通常、caseの処理が終わると、switch文は終了しますが、fallthroughを使うことで次のcaseに処理が移行します。

package main

import "fmt"

func main() {
  day := 2

  switch day {
  case 1:
    fmt.Println("月曜日")
  case 2:
    fmt.Println("火曜日")
    fallthrough
  case 3:
    fmt.Println("水曜日")
  default:
    fmt.Println("無効な日付")
  }
}

この例では、dayが2なので、「火曜日」と「水曜日」が表示されます。
fallthroughにより、case 2の処理が終了した後もcase 3の処理が続きます。

まとめ

Go言語のswitch文とcase文は、他の言語でも使用されているように簡潔かつ柔軟に条件分岐を実装するために役立ちます。
条件式を使ったcase文やfallthroughを利用することで、複雑な条件分岐も効率よく処理できます。