For people asking what to build to really learn Go, here’s a progression that maps well to how Go actually teaches you pragmatic systems thinking, concurrency, and production discipline.
---
Simple (start here, learn fundamentals & clarity)
1. Build a CLI tool (flag parsing, file I/O, error handling)
2. Build a log processor (bufio, streaming, memory efficiency)
3. Build a small HTTP client (net/http, retries, timeouts)
4. Build a basic HTTP server (handlers, middleware, context)
5. Build an in-memory cache (maps, mutexes, TTL)
6. Build a file watcher (fsnotify, goroutines, channels)
7. Build a config loader (env vars, YAML/JSON, validation)
8. Build a worker pool (goroutines, channels, backpressure)
---
Medium (where Go’s concurrency model clicks)
9. Build a REST API service (routing, middleware, graceful shutdown)
10. Build a job queue (channels vs persistent queues, retries)
11. Build a rate limiter (token bucket, leaky bucket)
12. Build a reverse proxy (net/http, connection reuse)
13. Build a metrics exporter (Prometheus client, counters, histograms)
14. Build a scheduler (cron-style, timers, cancellation)
15. Build a simple key-value store (files, WAL concepts)
16. Build an auth service (JWT, middleware, context propagation)
17. Build a search service (inverted index, concurrency-safe reads)
---
Hard (production-grade Go & systems depth)
18. Build a high-throughput TCP server (epoll-style patterns, pooling)
19. Build a distributed worker system (leader election, coordination)
20. Build a sharded cache (hashing, consistency trade-offs)
21. Build a Raft-based service (state machines, persistence)
22. Build a storage engine (indexes, compaction, snapshots)
23. Build a streaming pipeline (fan-in, fan-out, backpressure)
24. Build a custom protocol (binary framing, versioning)
25. Build a service mesh sidecar (proxies, retries, observability)
26. Build a full backend platform (API, async jobs, caching, metrics)
---
You learn Go by:
- Designing simple APIs
- Handling failure explicitly
- Respecting concurrency costs
- Writing code others can read at 3am
If your code feels boring, obvious, and stable then believe me, you’re doing it right.
@ohmypy I always feel relief when maintaining Go code, unlike Nodejs. So something works in the long run with little maintenance cost always gives me some sort of eagerness to try. Thanks for your hard work.
@ohmypy I use sqlite pretty much given its portability. I normally use freecache for caching key-value. Yet I do wanna try something else and your benchmark impresses me. I just wanna set something up and forget it. Performance does not matter much. Your solution seems perfectly fit.
Announcing Genkit Go 1.0 ✨
The SDK is now stable and production-ready. This release introduces the genkit init:ai-tools command for seamless integration with AI coding tools, plus built-in support for tool calling, RAG, and more.
Read the blog →https://t.co/ZEGtUcWLvx
✍️ Announcing https://t.co/gcfW8mOI9e – transcribe and translate any audio files!
10+ languages available (including Klingon 🤓)
It's entirely free AND open source.
https://t.co/hit2MinwgS