我是个初学者.
我试图找出一种简单的方法来实现一个只输出不同值的通道.
我想要做的是:
package example
import (
"fmt"
"testing"
)
func TestShouldReturnDistinctValues(t *testing.T) {
var c := make([]chan int)
c <- 1
c <- 1
c <- 2
c <- 2
c <- 3
for e := range c {
// only print 1, 2 and 3.
fmt.println(e)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用地图记住以前的值,我是否应该关注内存泄漏?
谢谢.
你真的不能这样做,你必须以某种方式跟踪价值观,这map[int]struct{}可能是最有效的记忆方式.
一个简单的例子:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |