Merge Channels in Go(lang)

Dr. Sandeep SadanandanJuly 8, 2019

Recently, I had to deal with receiving several events from Kafka. There were about 6 different types of events, but internally, the ways I had to deal with them were quite similar — so I decided for a generic method.

From Kafka, I was receiving events in individual channels (one channel per event type)

As my handling of the events was the one generic method, I wanted to take all the channels, merge them into a single channel which has all the events from all channels, combined*, from which I can pick one at at time**, and deal with it.

Doing it in Go was a breeze. Seriously, in 10 lines, all was done.

Here’s how I did it. (well, business events are replaced by integers here ;) )

I have two channels — one which delivers me odd numbers, and another one which delivers even numbers. And here’s how one can merge them.

Note that the function accepts a slice of channels — so, it doesn’t matter whether it’s just two channels, or 100.

For completion, here’s my sample program which contains the channel creations as well.

Run it as follows:

go run channelmerge.goAnd you’ll see all whole numbers being printed on your screen. (warning: infinite loop)

If you look closely, you’ll see that they are not all in order — of course, the channels are not synchronised with each other.

Cool. ah?

Signing off,
Sands.

*Combining the channels would give me a better solution than having 6 different loops to do the same thing, and having to add more such loops when I have more events-types**Naturally, at some point of time, I would want to speed that up,.. That we can do in another post for ThreadPooling

About the author

Dr. Sandeep Sadanandan

Dr. Sandeep Sadanandan

With two decades of experience, Sandeep brings onboard both theoretical and practical knowledge from a wide range of projects. Your ideas will blossom into wonderful products in his hands.

We have other interesting reads

Next.JS isn't all that bad.

Though I am primarily a backend/system developer, I have worked with frontend for a long time. Coffeescript, React JS/Native when it was just in beta, Rails, plain HTML/CSS, React when it matured a bit more, etc.

Dr. Sandeep SadanandanNovember 11, 2025

Smarter Machines, Fewer Headaches: AI-Powered Predictive Maintenance for Hydraulic Systems

Note: Interested in self-healing infrastructure? Check out my article on Revolutionizing Kubernetes Configuration Management with KHook and…

Maryam NaveedJanuary 8, 2026

Deploy Like a Pro: Zero Downtime Using Docker, GitHub Actions, and EC2

Deploying applications with minimal downtime is crucial for ensuring a seamless user experience. This article explores how to achieve an almost zero downtime deployment using GitHub Actions and Docker.

Tom JoseMarch 25, 2025