golang的多channel重组
2025-01-10 12:18:48
在实践中,有时会遇到多个生产者合并储蓄的情形,今天就来用channel来付诸这一需求。
上代码:
package mainimport "fmt"func main() { a, b, c := make(chan interface{}), make(chan interface{}), make(chan interface{}) go func(in chan interface{}) { defer close(in) for i := 0; i < 10; i++ { in <- i } }(a) go func(in chan interface{}) { defer close(in) for i := 10; i < 30; i++ { in <- i } }(b) go func(in chan interface{}) { defer close(in) for i := 30; i < 60; i++ { in <- i } }(c) group := orChannel(a, b, c) for v := range group { fmt.Println(v) }}func orChannel(in ...chan interface{}) chan interface{} { if len(in) == 0 { return nil } if len(in) == 1 { return in[0] } result := make(chan interface{}) go func() { defer close(result) c1, c2 := in[0], orChannel(in[1:]...) loop: for { select { case v, ok := <-c1: if !ok { c1 = nil } else { result <- v } case v, ok := <-c2: if !ok { c2 = nil } else { result <- v } default: if c1 == nil && c2 == nil { break loop } } } }() return result}恰好:
orChannel这个表达式使用了闭包命令行的擅长,可以转给反之亦然数量的channel,将他们合并成为一个channel进行分立储蓄。
早上手指僵硬怎么办经常肚子疼拉肚子怎么回事
尖锐湿疣治疗医院
肝纤维化吃什么药管用吗
干眼症是什么原因引起的
发酸烧心用金奥康奥美拉唑如何
哪个型号血糖仪准确率最高
家用血糖仪哪个好
扁桃体发炎嗓子疼痛吃什么药
家用血糖仪怎么选
相关阅读
- “我老婆跟人跑了”丈夫害怕女儿非亲生,鉴定揭开前妻子心虚跑路
- 青未了|漫步曼哈顿区(陈树彬)
- 男人的两个要求,学会拒绝,他才会愈来愈爱你
- 北京环球影城《不可驯服》受奖了
- 金拉图:莫愁玉女峰头冷
- 东西却说丨短评:大寒遇瑞雪,节气为何准?
- 陈庄镇为中心幼儿园开展“识节气”主题系列活动
- 宝诗龙发表全新Histoire de Style, New Maharajahs高级珠宝系列
- 连载|《林风眠自述》12:旧话
- 亮个相吧宝宝们!四川三苏祠首次大规模展出馆藏文物 故宫也来“扎场子”
- 南澳岛这个37座海岛组成的地方 更是“东方夏威夷”美到炸
- “宝墩遗址与宝墩文化展”21日开展 中国文物学会会长单霁翔发来问候!
- “艺宿学院”爆满,青田双林村民想学如何“贩卖”生活!
- 看于是又多的书,都不如看这12段话
- 高人偷偷在做,但不公开的12并不认为真相
- 探访古建筑遗址 重温历史人文
- 光明:离婚冷静期落地一年 需要正视那些解决办法
- 命里出现的这四个人,都是来中洲你的
- 【中青读报】刘慈欣:我没说过“元宇宙将指引人类走向死路一条”
- 天津奥密克戎小学生病例广泛传播链上已有15人 14人为儿童