七叶笔记 » golang编程 » golang设计模式——fan-in模式

golang设计模式——fan-in模式

golang有多种设计模式,其中fan-in模式比较常见,也经常使用。fan-in模式是从多个管道读取输入,汇总到一个channel输出。

Fan-In

示例:

package main

import (

“fmt”

“math/rand”

“time”

)

func main() {

c := fanIn(boring(1), boring(2))

for i := 0; i < 5; i++ {

fmt.Println(<-c)

}

}

func fanIn(input1, input2 <-chan int) <-chan int {

c := make(chan int)

go func() {

for {

c <- <-input1 }

}()

go func() {

for {

c <- <-input2 }

}()

return c

}

func boring(msg int) <-chan int {

c := make(chan int)

go func() {

for i := 0; ; i++ {

c <- msg*1000 + i

time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)

}

}()

return c

}

输出结果:

1000

2000

2001

1001

2002

小结: fan-in模式,fan-out模式数据基本模式,是用来做汇聚或者发散用的,比如proxy场景下使用,使用go channel模式一定要注意性能问题。

其中本文中仅介绍了一下扇入模式,对应的 扇出 模式就是发散,感兴趣的可以自行尝试下即可。

更多内容请关注头条号每日编程,每天进步一点。

相关文章