Go Mastery 8: Resources and Final Checklist
/ 2 min read
Table of Contents
Official
- Tour of Go: https://go.dev/tour
- Effective Go: https://go.dev/doc/effective_go
- Language spec: https://go.dev/ref/spec (read it fully once; it is short)
- Memory model: https://go.dev/ref/mem
- Go blog: https://go.dev/blog
- Code Review Comments: https://go.dev/wiki/CodeReviewComments
- GC guide: https://go.dev/doc/gc-guide
- Release notes: always skim for each new version
Books (in order)
- The Go Programming Language (Donovan & Kernighan)
- Learning Go (Jon Bodner), 2nd edition (covers generics)
- 100 Go Mistakes and How to Avoid Them (Teiva Harsanyi), must read
- Concurrency in Go (Katherine Cox-Buday)
- Let’s Go and Let’s Go Further (Alex Edwards): web apps and APIs
- Writing an Interpreter in Go (Thorsten Ball)
- Efficient Go (Bartłomiej Płotka): performance
Practice sites
- Exercism Go track, Gophercises, Go by Example, LeetCode/AoC in Go
- https://100go.co (summary of 100 Go Mistakes)
Community and reading
- Go Time podcast, GopherCon talks (YouTube), r/golang, Gophers Slack
- Dave Cheney, Russ Cox, Rob Pike talks (“Go Proverbs”, “Concurrency is not Parallelism”)
- Read stdlib source:
sync,net/http,io,sort,strings
Final Mastery Checklist
Language
- Explain slice internals and the append gotchas
- Explain the nil-interface problem
- Choose value vs pointer receivers correctly
- Use generics where appropriate and avoid them where not
- Wrap and inspect errors properly
Concurrency
- Build worker pools, pipelines, and graceful shutdown from scratch
- Find and fix a data race, a deadlock, and a goroutine leak
- Use
contextcorrectly everywhere
Engineering
- Write table-driven tests, benchmarks, and fuzz tests
- Profile with pprof and optimize based on data
- Structure a module and package cleanly
- Ship a Dockerized service with CI
Mindset
- Can write simple, boring, readable code by default
- Can review someone else’s Go code using the Code Review Comments
- Have read significant parts of the standard library source
- Have shipped or contributed to at least one real project
Visual: the learning loop
flowchart LR A["Learn a concept"] --> B["Code an exercise"] B --> C["Apply it in a project"] C --> D["Read stdlib or open-source code"] D --> E["Review and fix weak spots"] E --> A