Go Academy · レッスン

break、continue、ラベル

ループの制御フローとラベル付きbreak

レッスン 4/412 ステップ

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

ループ制御の基本

Goには、ループの実行を制御する3つのキーワードがあります。

  • break — 現在のループまたはswitchを終了します
  • continue — 次の反復へスキップします
  • goto — ラベル付き文へジャンプします(ほとんど使いません)

ラベルを使うと、外側のループに対してもbreakとcontinueを適用できます。

ループでのbreak

breakは、最も内側のfor、switch、またはselect文を直ちに終了します。

for i := 0; i < 100; i++ {
    if i*i > 50 {
        break
    }
    fmt.Println(i)
}

continue

continueは現在のループ本体の残りをスキップし、後処理文(または条件チェック)へ移動します。

for i := 0; i < 10; i++ {
    if i%2 == 0 {
        continue // skip even numbers
    }
    fmt.Println(i) // prints 1,3,5,7,9
}

ラベル付きbreak

forループの前にラベルを置くと、内側のループからそのループを抜けられます。

search:
for i, row := range grid {
    for j, cell := range row {
        if cell == target {
            fmt.Printf("found at %d,%d\n", i, j)
            break search
        }
    }
}

ラベル付きcontinue

ラベル付きcontinueは、ラベルが付いた外側のループの次の反復へスキップします。

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if j == 1 {
            continue outer
        }
        fmt.Printf("%d,%d\n", i, j)
    }
}

ラベルを使う場面

ラベルは次のような場合に適しています。

  • 深くネストした位置から、ネストしたループを抜ける必要がある
  • 関数への切り出しが冗長になりすぎる

Goでラベルを使うことは一般的ではありません。頻繁に必要になる場合は、関数やチャネルを使ったリファクタリングを検討してください。

goto(まれ)

Goには、ラベル付き文へジャンプするためのgotoがあります。同じ関数内でのみ使用でき、変数宣言を飛び越えてジャンプすることはできません。

  • 使用例:生成コード、複雑なエラー処理ループ
  • 手書きのコードでは避け、構造化された制御フローを優先します

selectでのbreak

select文の中でbreakを使うと、selectが終了します。外側のforループは終了しません。外側のループを終了するには、ラベル付きbreakを使用します。

loop:
for {
    select {
    case msg := <-ch:
        handle(msg)
    case <-done:
        break loop
    }
}

深いネストを避ける

深くネストしたループは読みにくくなります。ラベル付きbreakを追加する前に、次の点を確認してください。

  • 内側のループをヘルパー関数に切り出せないでしょうか?
  • チャネルやスライスを使って反復処理を簡潔にできないでしょうか?
  • 早期リターンで外側のネストを減らせないでしょうか?

実践パターン:breakを使った検索

よく使われるパターンは、コレクションを検索し、見つかった時点でbreakする方法です。

func contains(slice []string, target string) bool {
    for _, v := range slice {
        if v == target {
            return true // prefer return over break+flag
        }
    }
    return false
}

クイックチェック

Goで内側のループから外側のループを終了するには、どうしますか?

まとめ:break、continue、ラベル

Goでループの流れを効果的に制御しましょう。

  • breakは現在のループまたはswitchを終了します
  • continueは次の反復へスキップします
  • ラベルを使うと、break/continueの対象を外側のループにできます
  • gotoは存在しますが、慣用的なGoコードではほとんど使いません
  • selectの中から外側のforループを終了するには、ラベル付きbreakを使用します

次のコース:関数と複数の戻り値です。

無料で開始

AI チューターと学ぶ Go — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「break、continue、ラベル」レッスンは無料ですか?

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

「break、continue、ラベル」で何を学びますか?

ループの制御フローとラベル付きbreak ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「break、continue、ラベル」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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