ホームページ  >  記事  >  バックエンド開発  >  golang はチャネルが閉じられたことをどのように判断しますか?

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

尚
オリジナル
2019-12-31 09:45:452946ブラウズ

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 サイトの他の関連記事を参照してください。

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