Syllabus — expert path for Go
Status: Canonical outline for Sub-book 1.
Baseline: Go 1.26.x.
Voice: Journey / practice notebook. Ordering: expert pedagogy.
Chapters follow this path. Research day-tables (Session 2, Zai) are inventories—not calendars of record.
Why this order (expert rationale)
| Sequential before concurrent |
Solid types, slices, interfaces, errors first |
Goroutines in week 1 |
| Ship small early |
CLI / library mini-projects each stage |
Pure theory weeks |
| Tests as culture |
Table-driven tests from Stage II onward |
“We’ll test in phase 7” |
| Stdlib first |
net/http, database/sql, slog before frameworks |
Framework tourism |
| Generics after pain |
Introduce when duplication is real |
Generics day 2 |
| Measure before mysticism |
pprof after a real service exists |
Premature SIMD / micro-opts |
| Cloud-native is elective depth |
k8s client/operator as optional track |
Forcing every learner through operators |
| One capstone |
Integrate under one design |
Ten disconnected demos |
Sources used as inventory
- 90 Days of X Session 2 Go tables (day prompts, Go 1.26 notes, mini-projects)
- 90 Days of X Zai Go book (depth lists, weekly reviews)
Optional link to NixOS volume
If you later use the NixOS volume, packaging and deploy live there. This syllabus does not require Nix. You only need a clean Go module others can build.
Stage map
| I |
1–10 |
Toolchain + core sequential Go |
Small typed CLI; explain slices/maps |
| II |
11–18 |
Methods, interfaces, errors, modules |
Idiomatic module + tests |
| III |
19–30 |
Concurrency, context, correctness |
Race-clean pipeline with cancellation |
| IV |
31–38 |
Generics + testing depth |
Generic helper + solid test suite |
| V |
39–50 |
Stdlib I/O, HTTP, encoding, slog |
Tested HTTP service |
| VI |
51–62 |
Data, APIs, service boundaries |
Service + DB (or repository interface) |
| VII |
63–74 |
Tooling, perf, containers, observability |
Profiled, containerized binary |
| VIII |
75–90 |
Architecture, production, capstone |
Capstone demo + retrospective |
| Elective |
TinyGo 1–5 |
Embedded Go / soft realtime (optional) |
Blink/IRQ/UART/tasks/I2C labs green |
Days ≈ 3h blocks. Gates beat calendars. TinyGo elective does not replace Days 1–90.
TinyGo elective map
| T1 |
92-tinygo-01-toolchain-blink |
Install, targets, blink / wasip1 |
| T2 |
93-tinygo-02-button-irq |
Debounce, poll vs IRQ |
| T3 |
94-tinygo-03-uart-sensor |
Fixed-rate loop, misses, EMA |
| T4 |
95-tinygo-04-coop-tasks |
Cooperative multi-rate tasks |
| T5 |
96-tinygo-05-i2c-monitor |
I2C or mock + health status |
Cross-ref: monorepo Go/content/99-projects/100o–100s.
Stage II — Interfaces, errors, modules (Days 11–18)
| 11 |
Interfaces; implicit satisfaction; any |
Refactor domain behind interfaces |
| 12 |
Type assertions / type switches; nil interface gotcha |
Safe assertion helpers |
| 13 |
Errors: wrapping, Is/As/Join |
Validation library with inspectable errors |
| 14 |
Panic/recover — rare and deliberate |
Safe-call wrapper; know when not to |
| 15 |
Modules: go.mod/go.sum, semantic import paths |
Tidy module; explain versions |
| 16 |
Table-driven tests; t.Run; helpers |
Tests for validation + domain |
| 17 |
Fakes vs mocks; interface-driven tests |
Mock a dependency by hand |
| 18 |
Gate |
Publishable-shaped module: API + tests + README |
Stage III — Concurrency (Days 19–30)
| 19 |
Goroutines; scheduler mental model (G/M/P light) |
10k goroutines without meltdown |
| 20 |
Channels; close; nil channel |
Producer/consumer |
| 21 |
select; timeouts |
Multiplex fan-in |
| 22 |
sync primitives; channels vs mutex |
Three thread-safe counters + benchmark |
| 23 |
Worker pools; pipelines |
Bounded concurrent fetcher |
| 24 |
context: cancel, deadline; values sparingly |
Cancel the fetcher cleanly |
| 25 |
Race detector; leaks; deadlocks |
Break then fix a racy program |
| 26 |
Concurrency patterns catalog |
Fan-out with error propagation |
| 27 |
errgroup (or equivalent discipline) |
Parallel work with first-error cancel |
| 28 |
Memory model lite; happens-before intuition |
Document one race you fixed |
| 29 |
Integration day |
Combine pipeline + context + tests |
| 30 |
Gate |
Race-clean concurrent tool with graceful shutdown |
Stage IV — Generics & testing depth (Days 31–38)
| 31 |
Type parameters; constraints |
Generic Map/Filter |
| 32 |
Generic data structures; self-referential constraints (1.26 notes) |
Small generic collection |
| 33 |
When not to use generics |
Refactor that removes needless generics |
| 34 |
Fuzzing |
Fuzz a parser |
| 35 |
Golden files; t.Cleanup |
Snapshot tests for encoding |
| 36 |
Concurrent tests / synctest awareness |
Test a pipeline under concurrency |
| 37 |
Go 1.26 quality pass |
go fix; note Green Tea GC / new(expr) where relevant |
| 38 |
Gate |
Generic helper + fuzz or deep tests on a real package |
Stage V — Stdlib that pays rent (Days 39–50)
| 39 |
io interfaces; composition |
Transforming Reader |
| 40 |
bufio / bytes / strings |
Streaming parser |
| 41 |
encoding/json (+ awareness of json/v2 direction) |
Config loader with custom types |
| 42 |
os / os/exec |
Subprocess with timeout |
| 43 |
time; timers/tickers |
Simple scheduler |
| 44 |
net basics |
TCP echo |
| 45 |
net/http server; middleware chain |
Small HTTP API |
| 46 |
net/http client; transports |
Client with timeouts |
| 47 |
log/slog |
Structured logs end-to-end |
| 48 |
Templates / regexp as needed |
One real text task |
| 49 |
httptest + full handler tests |
Cover Day 45 API |
| 50 |
Gate |
HTTP service: slog + tests + clean shutdown |
Stage VI — Data & APIs (Days 51–62)
| 51 |
database/sql + pooling |
Repository over Postgres (or SQLite if constrained) |
| 52 |
Migrations; sqlc vs ORM trade-off |
Prefer sqlc-style or explicit SQL |
| 53 |
REST design with stdlib mux |
Versioned JSON API |
| 54 |
Authn/z basics (JWT or session) |
Protect routes |
| 55 |
Validation & problem details |
Consistent error JSON |
| 56 |
gRPC optional track A |
Protobuf + unary RPC or skip to deepen REST |
| 57 |
gRPC optional track B |
Streaming/interceptors or REST gateway polish |
| 58 |
Caching pattern (Redis optional) |
Cache interface + one impl |
| 59 |
WebSockets or SSE (pick one) |
Live updates endpoint |
| 60 |
TLS awareness for services |
Local HTTPS or documented terminate-at-proxy |
| 61 |
Integration tests |
testcontainers or dockerized deps if available |
| 62 |
Gate |
Service + data store + auth + tests |
Stage VII — Ship quality (Days 63–74)
| 63 |
Build tags; cross-compile |
linux/arm64 + darwin/arm64 artifacts |
| 64 |
Vet/staticcheck; module private/replace |
Lint-clean module |
| 65 |
pprof CPU/heap |
Profile a hot path |
| 66 |
Benchmarks; allocs |
Optimize with evidence |
| 67 |
GC tuning awareness (GOGC/GOMEMLIMIT) |
Measure one workload |
| 68 |
Containers; distroless/scratch |
Containerize the service |
| 69 |
Metrics (Prometheus client) |
One useful exporter metric |
| 70 |
OpenTelemetry traces (light) |
Trace one request path |
| 71 |
CLI ergonomics (cobra optional) |
Multi-command tool or flags-only polish |
| 72 |
Supply chain: govulncheck |
Remediate findings |
| 73 |
Elective: k8s client-go or deepen service |
Choose deliberately |
| 74 |
Gate |
Profiled, scanned, containerized release candidate |
Stage VIII — Architecture & capstone (Days 75–90)
| 75 |
Package boundaries; accept interfaces return structs |
Boundary refactor |
| 76 |
Hexagonal / clean architecture lite |
Ports for Day 62 service |
| 77 |
Config layering (flags/env/file) |
12-factor-ish loader |
| 78 |
Graceful shutdown; health probes |
Production lifecycle |
| 79 |
Feature flags / progressive delivery awareness |
One flag gate |
| 80 |
Load test (k6/vegeta) |
Find a bottleneck |
| 81 |
Security checklist pass |
Fix top issues |
| 82 |
Design doc for capstone |
Written plan |
| 83–88 |
Capstone build |
One integrated system (see below) |
| 89 |
Harden: tests, govulncheck, profile, load test |
Evidence pack |
| 90 |
Demo checklist + retrospective + Go 1.27 roadmap |
Close the volume |
Capstone options (pick one)
A — Control/observability agent (Session 2 flavored): watch processes/containers, metrics, small control API, slog, containerized.
B — Domain microservice: REST (and optional gRPC), DB, auth, tests, metrics.
C — Serious CLI product: multi-command tool with tests, release artifacts, optional Nix packaging join.
Avoid building A+B+C in one capstone.
Explicitly out of scope (spine)
- Full cloud certification content
- Every ORM/framework comparison
- Mandatory Kubernetes operator career path
- Deep
unsafe production use
- Replacing the official Go tour/blog/specs
Resources
- The Go Programming Language (Donovan & Kernighan) — fundamentals
- Learning Go (Bodner) — modern idioms
- 100 Go Mistakes (Harsanyi) — phase-end gap checks
- Official release notes for 1.24–1.26 — primary source
Writing rule
- Follow Stages I→VIII.
- Each chapter: idea → code → test → gotcha.
- Prefer stdlib until a library clearly pays rent.
- Update this syllabus before expanding scope.