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

}

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程