go-dojo
learn go · earn mastery

Curriculum

43 tasks, 6 phases, ~26 weeks. Each task has a concept, an exercise, and a verification test. Your repo tracks which ones you own.

phase 0 Onramp 5 tasks

0.1-backend-mental-model What is a backend? (concepts only) 0.2-go-toolchain Go toolchain — the red/green TDD loop 0.3-types-zero-values Static types + zero values 0.4-errors-as-values Errors as values, not exceptions 0.5-first-http-hit Make your first HTTP request in Go

phase 1 Go fundamentals 6 tasks

1.1-hello-world Setup & stdin-echo 1.2-types-structs Types, Structs, Interfaces — the Maelstrom node pattern 1.3-error-testing Error handling + table-driven tests 1.4-pointers-slices-maps Pointers, slices, maps — KV REPL 1.5-goroutines-channels Goroutines, channels, the intentional race 1.6-tdd-practice TDD muscle — property tests, reflection, SVG clock

phase 2 HTTP + stdlib 6 tasks

2.1-http-protocol HTTP as a protocol (what curl actually sees) 2.2-net-http-server net/http JSON API — no routers 2.3-concurrency-patterns Worker pool + fan-out/fan-in + context 2.4-networking-serialization TCP + line-delimited JSON — the Maelstrom twin 2.5-time-tickers time.Ticker + graceful shutdown 2.6-testing-at-scale Acceptance tests + fakes over mocks

phase 3 Backend building blocks 7 tasks

3.1-sql-fundamentals SQL fundamentals — no Go 3.2-postgres Postgres via database/sql + pgx 3.3-caching-fundamentals Caching fundamentals — redis-cli, no Go 3.4-redis Redis from Go — rate limit, lock, cache-aside, pub/sub 3.5-queue-fundamentals Message queue fundamentals — nats CLI, no Go 3.6-nats NATS + JetStream from Go 3.7-mini-system Three-binary link-analytics system

phase 4 Distributed-systems theory + practice 5 tasks

4.1-distsys-theory Read + discuss — DDIA Ch 5/8/9, Young Bloods 4.2-gossip-protocol Implement a gossip protocol standalone 4.3-logical-clocks Lamport + vector clocks 4.4-crdt G-Counter + PN-Counter CRDTs 4.5-maelstrom-setup Maelstrom installed + demo echo passes

phase 5 Gossip Glomers 14 tasks

5.1-echo Challenge 1 — Echo 5.2-unique-id Challenge 2 — Unique ID generation 5.3a-broadcast-single Challenge 3a — Single-node broadcast 5.3b-broadcast-flooding Challenge 3b — Naive multi-node broadcast 5.3c-broadcast-fault-tolerant Challenge 3c — Fault-tolerant broadcast 5.3d-broadcast-efficient Challenge 3d — Efficient broadcast 5.3e-broadcast-constrained Challenge 3e — Latency + budget constrained broadcast 5.4-g-counter Challenge 4 — G-Counter with seq-kv 5.5a-kafka-single Challenge 5a — Single-node log 5.5b-kafka-lin-kv Challenge 5b — Multi-node log via lin-kv 5.5c-kafka-efficient Challenge 5c — Efficient multi-node log 5.6a-txn-single Challenge 6a — Single-node transactions 5.6b-txn-read-uncommitted Challenge 6b — Read-uncommitted transactions 5.6c-txn-read-committed Challenge 6c — Read-committed transactions
Not sure where to start? Phase 0 kicks off with concepts, no code. If you already know backend, run go-dojo placement phase-3 to skip ahead.