golang はチャネルが閉じられたことをどのように判断しますか?

リリース: 2019-12-31 09:45:45
オリジナル
2825 人が閲覧しました

golang はチャネルが閉じられたことをどのように判断しますか?

チャネルはパイプラインに似ています。ゴルーチンの同期と通信で役割を果たします。また、Golang の CSP モデルの鍵でもあります。

golang のほとんどの型は値型です (参照型はスライス/チャネル/マップのみ) 読み取り/書き込み型が値型のチャネルの場合、要素サイズが比較的大きい場合はポインタを使用する必要があります頻繁なメモリ コピーのオーバーヘッドを回避します。

Golang のチャネルが閉じられているかどうかを判断する方法:

チャネルを読み取るときにチャネルが閉じられているかどうかを判断します

_,ok := <- jobs
ログイン後にコピー

この時点でチャネルがクローズされている場合 Close, ok 値は false

チャネルへの書き込み時にクローズされているかどうかを判断します

1, _,ok := <- jobs

この時点でチャネルが閉じられている場合、ok 値は false です。チャネルが閉じられていない場合、1 つのジョブが失われます。

2. select メソッドを使用します。

を使用して、タイムアウトと呼ばれる別のチャネルを作成します。タイムアウトになった場合は、このチャネルに true を送信し、プロデューサ内のジョブのチャネルにデータを送信します。選択を使用してタイムアウトを監視し、タイムアウトになった場合は、

go func() {
 time.Sleep(time.Second * 3)
 timeout <- true
 }()
ログイン後にコピー
go func() {
 for i := 0; ; i++ {
 select {
     case <-timeout:
         close(jobs)
         return
 
     default:
         jobs <- i
         fmt.Println("produce:", i)
         }
     }
 }()
ログイン後にコピー

golang の知識について詳しくは、golang チュートリアル コラムをご覧ください。

以上がgolang はチャネルが閉じられたことをどのように判断しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!