Go での個別のチャネルの実装
Go では、個別の値を出力するチャネルを実装するには、以前に確認された値を追跡するメカニズムが必要です。
一般的なアプローチの 1 つは、回答で提案されているように、マップ データ構造を使用することです。
func UniqueGen(min, max int) <-chan int { m := make(map[int]struct{}, max-min) ch := make(chan int) go func() { for i := 0; i < 1000; i++ { v := min + rand.Intn(max) if _, ok := m[v]; !ok { ch <- v m[v] = struct{}{} } } close(ch) }() return ch }
この関数は、指定された範囲内で最大 1000 個の個別の整数を生成するチャネルを生成します。これは、キーがこれまでに確認された値を表すマップを維持します。新しい値が見つかった場合 (マップに存在しない)、その値はチャネル上に送信され、その発生を記録するためにマップが更新されます。
メモリ リークの問題に関しては、この目的でマップを使用します。一般に、メモリ効率が高いと考えられています。 Go のマップはキー値を参照するため、メモリ消費量は遭遇する個別の値の数に比例します。ただし、マップは以前の値への参照を保持し続けるため、個別の値の数が非常に多くなると、依然として大量のメモリを消費する可能性があることに注意することが重要です。
以上がGo で個別の値のみを出力するチャネルを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。