フルバッファリングされたチャネルの検出
Go では、バッファリングされたチャネルには最大容量制限があります。バッファリングされたチャネルがその容量に達すると、追加のアイテムをそれに送信すると、通常、操作がブロックされます。ただし、ブロックする代わりに項目をドロップした方がよい状況もあります。
デフォルトでの Select ステートメントの使用
バッファされたチャネルがいっぱいかどうかを判断する 1 つの方法それは、default 句を含む select ステートメントを使用することです。以下に例を示します。
package main import "fmt" func main() { ch := make(chan int, 1) // Fill it up ch <- 1 select { case ch <- 2: // Put 2 in the channel unless it is full default: fmt.Println("Channel full. Discarding value") } }
この例では、select ステートメントには 2 つのケースがあります。
出力:
Channel full. Discarding value
チャンネル サイズの確認
フル チャンネルを検出するもう 1 つの方法は、チャンネル サイズを確認することです。 len(ch) を使用してサイズを取得し、cap(ch) を使用してその容量と比較します。
if len(ch) == cap(ch) { // Channel was full, but might not be by now } else { // Channel wasn't full, but might be by now }
このアプローチでは、次の理由により、if ブロックに入るまでに結果が有効であることが保証されないことに注意してください。サイズチェックと if ステートメントの間でチャネル アクティビティが発生する可能性があります。
以上がGo でフルバッファリングされたチャネルを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。