go func()内部for用途?不会死循环么?我想他会碰到为有值自动退出,无法一直循环是这个意思么?
来源:11-7 并发模式(下)

慕用8523549
2021-07-06
func fanInt(chs …chan string) chan string {
c := make(chan string)
for _, ch := range chs{
go func() { //每一个ch开一个goroutoine
for {
//从c1取出数据,再送给c
c <- <-ch
}
}()
}
ret
写回答
1回答
-
ccmouse
2021-07-07
这里实现的逻辑就是无法退出,他始终监听ch,如果有值,就送给c。这个fan in在程序生命周期中一直存在,直到main函数退出。
一般我们不会说有值就退出这样,不然我们只能收第一个值。(当然实现是可以的,for里面我们随时可以break)
还有一种是我们发送方会通知这里的fanIn去退出,可以通过close channel来做。那么这里我们就要处理一下close的情况:
v, ok := <- ch
if ok {
c <- v
} else {
break
}
00
相似问题