1. ホーム
  2. go

[解決済み] チャネルの要素数

2022-11-23 16:50:39

質問

バッファリングされたチャネルを使用して、チャネル内にある要素の数をどのように測定するのですか? たとえば、私はこのようなチャネルを作成し、送信しています。

send_ch := make(chan []byte, 100)
// code
send_ch <- msg

の数を測定したい。 msgs がチャンネルに send_ch .

測定とアクションの間に先取りが発生する可能性があるため、並行処理のために測定が正確でないことは承知しています (たとえば、次のビデオで説明されています)。 Google I/O 2012 - Go の並行処理パターン ). 私はこれをプロデューサーとコンシューマー間のフロー制御のために使用するつもりです。

どのように解決するのですか?

http://golang.org/pkg/builtin/#len

<ブロッククオート

func len(v Type) int

len組み込み関数は、その型に従って、vの長さを返します。

  • 配列:vの要素数。
  • 配列へのポインタ: *vの要素数(vがnilであっても)。
  • スライス、またはマップ:vの要素数、vがnilの場合、len(v)は0。
  • 文字列: vのバイト数。
  • Channel: チャンネルバッファにキューイングされている(未読の)要素数。vがnilの場合、len(v)は0。
package main

import "fmt"

func main() {
        c := make(chan int, 100)
        for i := 0; i < 34; i++ {
                c <- 0
        }
        fmt.Println(len(c))
}

が出力されます。

34