"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > Fanin Pattern in Go

Fanin Pattern in Go

Published on 2024-08-24
Browse:943

Fanin Pattern in Go

Let's take a look at the fan-in pattern. This is really useful in go when we have related data from multiple threads that we need to bring together.

For example, suppose you have made multiple API calls to different services and you need to combine the results.

This is a real easy pattern to implement, but you do need to pay attention to how you handle the channels. It is easy to get a deadlock condition.

// produce is used to simulate the different data sources
func produce(id int) chan int {
    ch := make(chan int)
    go func() {
        for i := 0; i 



Here we use the produce function to simulate the different sources. These source channels are sent to the fanin function which performs the combining operation.

The fanin function creates the output channel, then launches a goroutine that operates on each input. We use a WaitGroup to indicate when all the input sources have been combined into the output channel.

In this simple example, the main thread just iterates over the output. Notice that there is no guarantee on the order, values from the 2 inputs are mixed.

A key point to bring up is that we have to close the output channel when we are done combining the inputs. The range operator will wait indefinitely once the channel is empty. Comment out the close(output) line and you'll see that you get a deadlock condition.

How can we improve this? Leave me a comment below.

Thanks!

The code for this post and all posts in this series can be found here

Release Statement This article is reproduced at: https://dev.to/johnscode/fanin-pattern-in-go-5e5d?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3