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中文网其他相关文章!