0Pricing
Go Academy · レッスン

Goのswitch文

タグ付きswitch、タグなしswitch、fallthrough

「Goのswitch文」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

switchの基本

GoのswitchはCよりも強力です。デフォルトではフォールスルーせず、1つのcaseに複数の値を指定できます。

day := "Monday"
switch day {
case "Saturday", "Sunday":
    fmt.Println("Weekend")
default:
    fmt.Println("Weekday")
}

暗黙的なフォールスルーなし

Goでは各caseの本体が自動的に終了します。breakを明示的に書く必要があるCとは異なります。

  • コードが簡潔になり、バグが減ります
  • Cのような動作が必要な場合は、fallthroughを明示的に使用します(通常はほとんど必要ありません)

初期化文付きのswitch

ifと同様に、switchにも任意の初期化文を指定できます。

switch os := runtime.GOOS; os {
case "linux":
    fmt.Println("Linux")
case "darwin":
    fmt.Println("macOS")
default:
    fmt.Printf("Other: %s\n", os)
}

タグなしswitch(if-else連鎖の代替)

タグなしswitchでは、キーワードの後に式を置きません。各caseがブール式を評価します。

score := 75
switch {
case score >= 90:
    fmt.Println("A")
case score >= 80:
    fmt.Println("B")
case score >= 70:
    fmt.Println("C")
default:
    fmt.Println("F")
}

型switch

型switchは、インターフェース値の動的な型を調べます。

func describe(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("int: %d\n", v)
    case string:
        fmt.Printf("string: %s\n", v)
    default:
        fmt.Printf("unknown: %T\n", v)
    }
}

fallthrough

fallthroughを使うと、条件に関係なく次のcase本体を明示的に実行できます(通常はほとんど必要ありません)。

n := 1
switch n {
case 1:
    fmt.Println("one")
    fallthrough
case 2:
    fmt.Println("one or two")
}

1つのcaseに複数の値

1つのcaseに複数の値を指定するには、値をカンマで区切って列挙します。

func isVowel(c byte) bool {
    switch c {
    case 'a', 'e', 'i', 'o', 'u':
        return true
    }
    return false
}

switchとif-elseの使い分け

次のような場合はswitchを使用します。

  • 1つの式を多くの値と比較する
  • インターフェースのディスパッチに型switchを使用する
  • if-elseの連鎖よりも読みやすくなる

条件が異なるブール式の場合はif-elseを使用します。

switchでのbreak

switchを途中で終了するにはbreakを使用します。switchの中から外側のループを終了するには、ラベル付きbreakを使用します。

loop:
for {
    switch input() {
    case "quit":
        break loop  // exits the for loop
    }
}

defaultケース

他のどのcaseにも一致しない場合、defaultケースが実行されます。ベストプラクティスは次のとおりです。

  • 列挙値を処理する場合は、想定外の値を検出できるよう、必ずdefaultを含めます
  • 読みやすさのため、末尾に配置します
  • 型switchでは、サポートされていない型を適切に処理するためにdefaultを使用します

クイックチェック

Goでswitchのcaseが一致すると、何が起こりますか?実行はフォールスルーしますか?

まとめ:Goのswitch

Goのswitchは簡潔で強力です。

  • 暗黙的なフォールスルーはありません。必要な場合はfallthroughを明示的に使用します
  • 一時変数のスコープを限定する初期化文を使用できます
  • タグなしswitchはif-else連鎖の代替になります
  • インターフェースのディスパッチには型switchを使用します
  • カンマ区切りで、1つのcaseに複数の値を指定できます

次は、break、continue、ラベルによるループ制御です。

よくある質問

「Goのswitch文」レッスンは無料ですか?

はい。「Goのswitch文」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「Goのswitch文」で何を学びますか?

タグ付きswitch、タグなしswitch、fallthrough ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Goのswitch文」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if文と初期化式
  2. forループ:すべてのパターン
  3. Goのswitch文
  4. break、continue、ラベル
← Go Academyに戻る