The language and its concurrency: types and zero values, slices and maps, interfaces and errors, generics and iterators, goroutines and channels, context and synchronization, the scheduler, leaks and races, graceful shutdown
Go Fundamentals
How Go differs from Python and Java, zero values and iota, slices and maps, strings and runes, methods and receivers, interfaces and the nil trap, errors and wrapping, defer and panic, generics, escape analysis, embedding, packages, iterators, comparability
Concurrency
Goroutines and channels, select and context, mutexes and WaitGroup, errgroup, goroutine leaks and data races, the memory model and atomics, worker pools and pipelines, sync.Once and sync.Pool, concurrency limits, the scheduler, graceful shutdown, testing with synctest
Toolchain & Modules
Module anatomy and go.sum, minimal version selection, go get and go install, the major version suffix, checksums and supply chain, proxy and caches, replace and vendoring, workspaces, upgrading Go, multi-module repositories, dependency graph analysis, API compatibility, dependency updates, private module setups
Build & Deploy
go build and go install, cross-compilation, build tags, linker flags, CGO and static linking, minimal images, the build cache, reproducibility, go:embed, build info inside the binary, profile-guided optimization, vulnerability scanning, package initialization order
Testing, Profiling, Linters
Test anatomy and table tests, helpers and cleanup, test doubles, golden files, coverage, httptest, fuzzing, benchmarks and benchstat, CPU and memory profiling, go vet and golangci-lint, integration tests, tests in CI
Runtime & Operations
Process memory and RSS, the garbage collector and its tuning, container limits and OOMKilled, runtime metrics, slog, panic analysis and post-mortem debugging, continuous profiling, request tracing, the database connection pool, go tool trace, latency diagnosis, upgrading Go, behaviour under saturation