ホームページ  >  記事  >  バックエンド開発  >  外部関数から Go の For ループを抜け出すにはどうすればよいですか?

外部関数から Go の For ループを抜け出すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 07:20:28217ブラウズ

How Can I Break Out of a For Loop in Go from an External Function?

外部からの For ループ実行の中断: Go プログラミング ソリューション

プログラミングでは、多くの場合、実行フローを制御する必要があります。特にループを管理する場合。 Go では、外部ソースから無限 for ループを終了する必要がある状況に遭遇することがあります。この記事では、包括的なソリューションを提供することで、この特定のシナリオに対処します。

問題の説明:

スケジュールされた関数と同時に実行される、ラベル付きの無限 for ループを考えてみましょう。目標は、スケジュールされた関数内で特定の条件が満たされたときにループを中断することです。以下はそのような試みの例ですが、スコープの制限により失敗します:

<code class="go">package main

import (
  "fmt"
  "sync"
  "time"
)

func main() {
  count := 0
  var wg sync.WaitGroup
  wg.Add(1)
  t := time.NewTicker(time.Second * 1)

  go func() {
    for {
      fmt.Println("I will print every second", count)
      count++
      if count > 5 {
        break myLoop; // Issue due to scope error: 'myLoop' not visible
        wg.Done()
      }
      <-t.C
    }
  }()

  i := 1

  myLoop:
  for {
    fmt.Println("iteration", i)
    i++
  }

  wg.Wait()
  fmt.Println("I will execute at the end")
}

解決策:

この望ましい機能を実現するには、シグナリング チャネルを使用します。 。段階的な内訳は次のとおりです:

1.シグナリング チャネルの作成:

タイプ chan struct{} のシグナリング チャネル quit を作成します。このチャネルは、ループを終了するタイミングの信号として機能します。

<code class="go">quit := make(chan struct{})

2.チャネルを閉じてシグナル ブレークします:

スケジュールされた関数内で条件が満たされると、シグナリング チャネルを閉じます。これは、for ループが中断される必要があることを示します。

<code class="go">go func() {
    for {
        fmt.Println("I will print every second", count)
        count++
        if count > 5 {
          close(quit)
          wg.Done()
          return
        }
        <-t.C
    }  
  }()</code>

3.チャネルの閉鎖を確認してループを中断します:

for ループでは、select ステートメントを使用してシグナリング チャネルから読み取ります。チャネルが閉じられる (ブレークの合図) と、実行は case <-quit: ブロックに分岐し、ループが中断されます。それ以外の場合、デフォルトのケースでは通常どおり反復が実行されます。

<code class="go">myLoop:
  for {
    select {
    case <-quit:
      break myLoop
    default:
      fmt.Println("iteration", i)
      i++
    }
  }</code>

このソリューションにより、ループの実行を独自のスコープ外から効果的に制御できるようになり、必要に応じて心配することなくループを終了できるようになります。範囲の制限。

以上が外部関数から Go の For ループを抜け出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。