ホームページ > バックエンド開発 > Golang > `select` は `case ch2 で受信するか送信するかを選択します

`select` は `case ch2 で受信するか送信するかを選択します

Barbara Streisand
リリース: 2024-11-15 07:58:02
オリジナル
830 人が閲覧しました

Does `select` Choose to Receive or Send in `case ch2

単一の case ステートメント内での受信と送信

Go では、同じ select case ステートメント内で受信操作と送信操作を組み合わせることができます。次のコード スニペットで示されているように:

for {
    select {
    ...
    case ch2 <- (<-ch1):
    ...
    }
}
ログイン後にコピー

このコードは、チャネル ch1 の結果をチャネル ch2 に転送することを目的としています。ただし、select ステートメントが ch1 からの受信と ch2 への送信のどちらの操作を選択するかという問題が生じます。

選択プロセス

Go で説明したとおりselect ステートメントを入力するときのドキュメントを参照してください:

  • 受信操作と送信ステートメントのチャネル式が評価され、受信または送信先のチャネルのセットと、対応する送信値が生成されます。
  • 副作用はこの評価中にすぐに発生します。
  • 短い変数宣言または代入を含む受信操作の左側の式は評価されません。

指定されたコードの影響

提供された例では、次のことが発生します:

case ch2 <- (<-ch1):
ログイン後にコピー
  • 式 <-ch1 が評価され、すぐにブロックされます。 ch1 から受信します。
  • 結果の値は、割り当ての左側にある一時変数に格納されます。
  • 次に、select ステートメントは、ch2 で送信操作が発生するかどうかを制御します。

したがって、select ステートメントは、ch1 から受信した値を ch2 に送信するか、別のケースを処理するかを選択します。

Side Effect

たとえ ch1 からの受信動作が最終的に選択されなかったとしても、値は依然として消費され、破棄されることに注意することが重要です。この動作は重大な可能性があるため、このパターンを使用する場合は考慮する必要があります。

以上が`select` は `case ch2 で受信するか送信するかを選択しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート