Go の個別のチャネル
Go では、個別の値のみを出力するチャネルを作成することが一般的な要件です。ただし、これを実現するには、いくつかの追加の考慮事項が必要です。
実装
簡単な解決策は、マップを利用して検出された値を保存することです。以下に簡単な実装を示します。
<code class="go">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 }</code>
メモリ リークの懸念
マップを使用して以前に発生した値を記憶する場合、メモリ リークが心配になる場合があります。ただし、この実装では、マップは可能な値の範囲 (最大値 - 最小値) に制限されており、チャネルが閉じるとクリアされます。したがって、メモリリークの心配はありません。
以上がGo で個別のチャネルを作成する方法: メモリ リーク防止ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。