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

Nginx Ingress Expires in March 2026 — Migrate to Gateway API with Envoy Gateway

Full setup with TLS (cert-manager), wildcard domains, automatic DNS (ExternalDNS), and real-world debugging

Tom JoseFebruary 3, 2026

SSH to WSL from terminal emulator

So, you have setup WSL ( Windows Subsystem for Linux) and are not happy with the “built in”emulator. In my case, I wanted to use an…

Dr. Sandeep SadanandanFebruary 4, 2020

How AI-Powered Fraud Detection Works: A Business Leader’s Guide

Understanding the technology that protects billions in transactions every day

Maryam NaveedJanuary 27, 2026