ホームページ  >  記事  >  バックエンド開発  >  go チャネルに問題があり、閉じられたチャネルで送信しています

go チャネルに問題があり、閉じられたチャネルで送信しています

WBOY
WBOY転載
2024-02-11 18:21:081239ブラウズ

go 通道出现问题,在封闭通道上发送

php エディター Youzi は、Go 言語を使用した開発プロセス中にいくつかの問題に遭遇することがあります。その 1 つは、クローズド チャネルでデータを送信するときの問題です。この問題により、チャネルのブロックやプログラムの停止が発生し、アプリケーション全体の動作に影響を与える可能性があります。この問題を解決する前に、まずクローズド チャネルとは何か、またクローズド チャネルでのデータ送信に問題がある理由を理解する必要があります。次に、この問題を詳しく調べて、Go アプリケーションを修正および最適化するためのソリューションを提供します。

質問の内容

致命的なエラーが発生します:「閉じたチャネルで送信しています」というコードが実行されることがあります。複数の解決策を試しましたが、どれも機能しませんでした。これはコードの表現ですこれは理解しやすく、テストに使いやすいです:

CB14CE50B218D8EAB916B15CD95527D5

私が望むのは、リクエスト関数を n 回開始して最初に完了したリクエストを取得し、その後チャネルを閉じてチャネルにそれ以上のリクエストを送信しないことです。どのリクエストも正常に完了しなかった場合は、すべてのゴルーチンが完了するまで待機します。 .

これは、2 つ以上のゴルーチンがチャネルが閉じられているかどうかを同時にチェックし、両方がチャネルに書き込もうとし、致命的なエラーが発生するために起こると思います。

###間違い:### リーリー

なぜこれが起こるのか説明できる人はいますか?

よろしくお願いします

解決策

問題は、受信側のゴルーチン (

main

) が途中で終了してしまうことです outputCh。他の goroutine がまだ送信を試みることができます。 これは別の方法です:

リーリー

以上がgo チャネルに問題があり、閉じられたチャネルで送信していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。