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中文網其他相關文章!