gpt4 book ai didi

go - 在 Go 中编写不同 channel 的正确方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:26:41 25 4
gpt4 key购买 nike

我是围棋初学者

我正在尝试找出一种简单的方法来实现只输出不同值的 channel 。

我想做的是:

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)
}
}

如果我要使用映射来记住以前的值,我应该担心这里的内存泄漏吗?

最佳答案

您真的不能那样做,您必须以某种方式跟踪这些值,map[int]struct{} 可能是内存效率最高的方式。

一个简单的example :

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
}

关于go - 在 Go 中编写不同 channel 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25288763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com