Zero to Hero: Go — 35-Day Curriculum
A project-based path from absolute beginner to production-minded Go developer, pairing core concepts with hands-on projects built from scratch.
Week 1: Foundations (Days 1–7)
| Day | Topic | Project |
|---|---|---|
| 01 | Toolchain, go mod, workspace, packages, fmt |
Hello, Go Modules |
| 02 | Variables, types, control flow, := vs var |
CLI Calculator |
| 03 | Functions, structs, multiple return values, basic errors | Contact Card |
| 04 | Pointers, value vs pointer receivers, new |
Memory Explorer |
| 05 | Arrays, slices, strings, strings package |
String Statistics Tool |
| 06 | Maps, method sets, comma-ok idiom, embedded structs | Word Frequency Counter |
| 07 | Packages, exported identifiers, go.mod and dependencies |
Multi-package library |
Milestone: You understand Go’s core model — value semantics, explicit pointers, and why the language is deliberately small.
Week 2: Core Language (Days 8–14)
| Day | Topic | Project |
|---|---|---|
| 08 | Idiomatic project structure: flat, cmd/, internal/, domain-driven layout |
Restructure the notes API |
| 09 | Interfaces, duck typing, type assertions, type switches | Shape library |
| 10 | Error handling: fmt.Errorf, %w, errors.Is, errors.As, custom types |
CSV row parser |
| 11 | Generics: type parameters, comparable, custom constraints |
Generic Stack and Queue |
| 12 | sort, container/heap, container/list, adjacency-map graphs |
Data structures library |
| 13 | Closures, function types, higher-order functions, functional options | Data pipeline |
| 14 | go test, table-driven tests, subtests, testing.B, testify |
Full test suite |
Milestone: You can structure a Go project idiomatically and model any domain with interfaces, errors, and generics.
Week 3: Intermediate Patterns (Days 15–21)
| Day | Topic | Project |
|---|---|---|
| 15 | io.Reader/io.Writer, fmt.Stringer, sort.Interface, embedding |
Interface showcase |
| 16 | Goroutines, channels, select, fan-out / fan-in, range over channels |
Parallel file hasher |
| 17 | sync.Mutex, sync.RWMutex, sync.WaitGroup, sync.Once, sync/atomic |
Thread-safe LRU cache |
| 18 | context — cancel, timeout, deadline, values; TCP echo server |
Cancellable HTTP downloader |
| 19 | os, bufio, io — file I/O, walking directories, io.Copy |
Config file reader |
| 20 | encoding/json, struct tags, streaming encode/decode, encoding/csv |
Config manager |
| 21 | flag package, cobra subcommands, stdin/stdout, exit codes |
todo CLI tool |
Milestone: You can write concurrent programs, handle I/O idiomatically, and build CLI tools.
Week 4: Production (Days 22–28)
| Day | Topic | Project |
|---|---|---|
| 22 | net/http — handler, middleware, http.Client, JSON API |
HTTP echo server + client |
| 23 | REST API with chi, JSON middleware, in-memory store |
Notes REST API |
| 24 | database/sql + SQLite driver, prepared statements, transactions |
Persist notes to database |
| 25 | Error hierarchy: sentinels, typed errors, HTTP error responses | Clean error layer for notes API |
| 26 | log/slog — structured logging, handlers, trace IDs via context |
Structured logs across the notes app |
| 27 | go test -bench, b.N, -benchmem, go tool pprof |
Profile word-frequency counter |
| 28 | //go:embed, text/template, html/template, build tags, go:generate |
Embedded assets server with templates |
Milestone: You can serve HTTP, back it with a database, instrument it with structured logs, and benchmark it.
Week 5: Advanced Golang Concepts (Days 29–34)
| Day | Topic | Project |
|---|---|---|
| 29 | reflect — TypeOf, ValueOf, struct tags, reflect.Kind |
Custom Describe utility |
| 30 | Versioning, pkg.go.dev, Docker multi-stage build, goreleaser |
Package and ship the shape library |
| 31 | Interfaces: composition, nil trap, stdlib catalogue, accept-interfaces/return-structs, mocking, anti-patterns | Pluggable notification system |
| 32 | Channel model: pipelines, fan-out/in, done channels, select, direction types, common mistakes |
Channel-based text pipeline + word counter |
| 33 | Goroutines & sync: Mutex, RWMutex, WaitGroup, Once, atomic, sync.Map, errgroup, deadlocks |
Concurrent download manager |
| 34 | Context deep dive: tree propagation, values, middleware, DB ops, leak detection, testing patterns | Request-scoped pipeline |
Milestone: You have a deep working knowledge of Go’s most nuanced subsystems — interfaces, channels, goroutines, and context.
Capstone Project (Day 35)
| Day | Topic | Project |
|---|---|---|
| 35 | Capstone | End-to-end CLI + REST API + database app |
Apply everything you have learned across the five weeks to build a complete, production-quality Go application of your own choosing.
Capstone options — choose a scope that fits your time and ambition:
Small (2–3 days)
- A
grepreplacement: recursive regex search with coloured output - A password generator/manager storing entries encrypted on disk
- A Markdown terminal renderer
Medium (1–2 weeks)
- A URL shortener: REST API + redirect server + SQLite backing store
- A personal finance tracker: CSV import, categorisation, monthly summaries
- A WebSocket chat server with rooms
Large (2–4 weeks)
- A static site generator: Markdown → HTML with templates and live-reload
- A bitcask-inspired key-value database with a WAL and compaction
- A concurrent web crawler with configurable depth and output formats
Recurring Principles
- Build first, read the spec second
- Errors are values — handle them at every call site
- Prefer the standard library before reaching for external packages
- Concurrency is not parallelism — understand the difference before using either
- Iterate on earlier projects rather than rewriting from scratch