Batteries included
The Standard Library & Tooling
Go ships with a famously capable standard library and toolchain — so most days you write less code, not
more. From fmt and the io interfaces to encoding/json, files, the
CLI and structured logging, then the testing, benchmarking and profiling tools that come in the
box.
Mark a topic “learned” on its page and watch the bars fill.
Skill map
Learned nodes light up — the glowing one is your next step. Click any node to jump in.
Core Packages
The packages you reach for daily — fmt and the io interfaces, strings and bytes, encoding/json, and working with time.
Formatting and streaming — the fmt verbs you'll actually use, width/precision flags, the Stringer/Formatter hooks, and the tiny io.Reader/io.Writer interfaces (plus io.Copy, MultiWriter, TeeReader) that everything plugs into.
✦ Complete · ⏱ 9 min 2 · Beginner strings & bytesThe text toolkit — searching and transforming with the strings package, O(n) assembly via strings.Builder, the parallel bytes package and bytes.Buffer, strconv for number⇄string conversion, and the unicode/utf8 view of multibyte text.
✦ Complete · ⏱ 7 min 2.5 · Beginner regexpPattern matching in Go — compile once with MustCompile, match/find/replace, capture groups (named and numbered), the linear-time RE2 engine and what it deliberately can't do (no backreferences), and when plain strings functions are the better tool.
✦ Complete · ⏱ 5 min 3 · Beginner encoding/jsonTurning Go values into JSON and back — Marshal/Unmarshal, struct tags and omitempty, decoding into structs vs maps, streaming Encoder/Decoder, custom Marshaler/Unmarshaler, and json.RawMessage for deferred decoding.
✦ Complete · ⏱ 7 min 3.5 · Intermediate text/template & html/templateData-driven text generation — actions, fields and pipelines, if/range/with control flow, custom funcs, and why html/template's context-aware auto-escaping is the one you must use for the web.
✦ Complete · ⏱ 6 min 4 · Beginner timeInstants, durations and the famous reference layout — formatting and parsing, time arithmetic and zones, the monotonic clock, measuring elapsed time, and timers vs tickers (and how to stop them).
✦ Complete · ⏱ 5 minFiles, CLI & Logging
Talking to the outside world — reading and writing files with os, building command-line tools with flag, and structured logging with slog.
Reading and writing files with os — whole-file vs streaming, OpenFile flags and permission bits, directories and FileInfo, portable paths via path/filepath (and filepath.WalkDir), and the os entry points (args, env, std streams, Exit).
✦ Complete · ⏱ 8 min 6 · Beginner CLI Tools with flagBuild command-line tools with the flag package — typed options with defaults, binding with Var, positional args, subcommands via FlagSet, custom flag.Value types, and env-var fallbacks.
✦ Complete · ⏱ 6 min 7 · Intermediate Structured Logging with slogLog key-value attributes with log/slog — Text vs JSON handlers, levels and thresholds, slog.With and slog.Group for context, typed attributes and LogAttrs for the hot path, and why structured logs beat fmt.Println in production.
✦ Complete · ⏱ 5 min 7.5 · Intermediate os/execRunning external programs from Go — exec.Command, Run vs Output vs Start, capturing stdout/stderr, streaming and pipes, context timeouts, environment and working directory, and why there's no shell (and why that's a security win).
✦ Complete · ⏱ 6 minTesting
Go's batteries-included testing — the testing package, table-driven tests and subtests, fuzzing, and benchmarks.
The testing package and go test — writing TestXxx functions, Errorf vs Fatalf, t.Helper, and the got/want convention that runs with go test ./...
✦ Complete · ⏱ 8 min 9 · Intermediate Table-Driven Tests & SubtestsThe idiomatic Go pattern — a slice of named cases looped through t.Run subtests, with t.Parallel, so one test scales to dozens of inputs.
✦ Complete · ⏱ 5 min 10 · Intermediate FuzzingNative Go fuzzing — FuzzXxx with f.Add seeds and f.Fuzz, how a fuzzer hunts for panics and broken properties, and go test -fuzz.
✦ Complete · ⏱ 4 min 11 · Intermediate BenchmarksMeasuring speed with BenchmarkXxx and b.N — reading ns/op, B/op and allocs/op, and the classic += vs strings.Builder comparison.
✦ Complete · ⏱ 6 minTooling & Profiling
The toolchain that ships with Go — the go command and modules, profiling with pprof, and catching data races with the race detector.
One tool does it all — build, run, test, format, vet, and document Go code, plus embed files and cross-compile static binaries from a single command.
✦ Complete · ⏱ 7 min 13 · Intermediate Modules & DependenciesDependency management in depth — go.mod and go.sum, go get / mod tidy, semantic versioning, minimal version selection, replace directives, workspaces, and vendoring.
✦ Complete · ⏱ 7 min 14 · Advanced Profiling with pprofMeasure before you optimize — capture CPU, heap, and goroutine profiles with runtime/pprof or net/http/pprof, then read hot paths in go tool pprof.
✦ Complete · ⏱ 7 min 15 · Intermediate The Race DetectorCatch data races automatically — -race instruments memory accesses to flag concurrent unsynchronized reads/writes, prints the two conflicting goroutines, and points at the fix.
✦ Complete · ⏱ 6 min🐹 Read the standard library
The stdlib is small, consistent and beautifully written — and its source is some of the best Go you can
learn from. When an interface feels right (io.Reader, http.Handler), it's
usually because the standard library set the example. Prefer it before reaching for a dependency.