Intermediate

Concurrency with Goroutines and Channels

Launch thousands of lightweight goroutines, coordinate them with channels, and avoid the races that catch everyone once.

~6h
0 / 6 steps
🚀
Intro

Before We Start

Prerequisites: comfort with Go functions and basic types; Go Fundamentals and Tooling.

Version note: verified against current docs as of July 2026, targeting the common Go 1.25/1.26 feature set.

A goroutine costs a few kilobytes of stack and the runtime multiplexes thousands of them onto a handful of OS threads, so "just spawn a goroutine" is genuinely cheap in Go in a way it isn't with OS threads in most other languages. Channels give goroutines a safe way to hand data to each other instead of sharing memory and hoping. This project builds a small concurrent URL-status checker, then finds and fixes a deliberately introduced data race.

🔨

Launch goroutines and wait for them, then coordinate with channels

🔨

Limit concurrency with a worker pool

🔨

Find a race with the race detector

🎯
Secret Mission

Secret Mission: A rate-limited pipeline

🧹
Wrap Up

Before You Go

Pro

Test what you just learned

Self-testing is one of the best ways to retain new skills. Unlock project quizzes to check your understanding.

Log in to unlock