Go 中的不同通道实现
在 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 }
此函数生成一个通道,该通道在指定范围内生成最多 1000 个不同的整数。它维护一个映射,其中的键代表迄今为止看到的值。如果遇到新值(映射中不存在),则会在通道上发送该值,并更新映射以记录其出现。
至于内存泄漏问题,请使用映射来实现此目的通常被认为是内存高效的。 Go 中的映射引用键值,因此内存消耗与遇到的不同值的数量保持正比。但是,需要注意的是,映射将继续保留对先前值的引用,因此,如果不同值的数量变得非常大,它仍然可能会消耗大量内存。
以上是如何在 Go 中实现仅输出不同值的通道?的详细内容。更多信息请关注PHP中文网其他相关文章!