【发布时间】:2020-12-17 04:13:12
【问题描述】:
我有两个通道,首先给我一些字符串,我需要过滤到相同的值,然后结果需要发送到第二个通道
func main() {
c := make(chan string, 5)
o := make(chan string, 5)
arr := []string{"aa", "ab", "ab", "bb", "bb", "ba", "cc"}
for _, v := range arr {
c <- v
go removeDuplicates(c, o)
time.Sleep(1 * time.Second)
fmt.Println("output: ", <-o)
}
}
func removeDuplicates(cIn, cOut chan string) {
last := ""
for cur, isOpen := <-cIn; isOpen; {
if cur != last {
fmt.Printf("val: %s, last: %s\n", cur, last)
last = cur
cOut <- cur
//close(cOut)
}
}
}
我尝试将以前的值保存到“last”变量,但是当我运行程序时,“last”为空
val: aa, last:
output: aa
val: ab, last:
output: ab
val: ab, last:
我也不知道在这种情况下何时需要关闭哪些频道。 感谢您的帮助和关注
【问题讨论】:
-
您的代码无法编译。请提供minimal reproducible example。
-
如果你能添加一个带有游乐场链接的小例子会很好
-
last = <- cur也许? -
对不起各位,这是一个测试任务,我自己没有看到所有代码,我试图在操场上重现它,但它通常会报错:“超时运行程序”play.golang.org/p/MpUyPkkP0XF
-
@SaeedEntezari 否
cur不是chan string而是string。因此你不能做<-cur!
标签: go concurrency channel goroutine