gopherpath
0%

Go, for someone who already ships Java.

Every lesson is three panes: idiomatic Go, the Java you would have written, and the TypeScript that maps closest to Go's structural typing. Work top to bottom; each module ends with a checkpoint you can prove.

13lessons live
12modules
116hfull track
01

Types: no classes, no inheritance

Structs, methods, embedding, and interfaces that are satisfied implicitly. The biggest mental shift after the toolchain.

2 lessons · 85 min
  1. Structs, embedding, and interfaces nobody declares 45m

    Composition is the only inheritance Go has, and interfaces are satisfied by accident — on purpose.

  2. Value semantics and the nil-interface trap 40m

    Everything is passed by value. Slices and maps lie about it. And a non-nil interface holding a nil pointer is the bug you will ship once.

02

Collections, strings, memory

Slices that alias, maps that never order, bytes vs runes, and where your allocations actually go.

3 lessons · 105 min
  1. Slices are headers, maps are pointers 40m

    One slice bug explains half of all Go production incidents. Learn it here, not in an outage.

  2. Strings are bytes, characters are runes 30m

    len() lies to you, indexing splits characters in half, and string concatenation in a loop is the oldest Go performance bug.

  3. Where the memory goes 35m

    Stack vs heap, struct padding, and why Go's GC asks you a different question than the JVM's.

04

Concurrency: the hiring differentiator

Goroutines against virtual threads (JEP 444), channels, select, context, errgroup, and the race detector.

4 lessons · 180 min
  1. Goroutines vs virtual threads 50m

    The reason Go gets hired for: 2 KB stacks, an M:N scheduler, and no pool. Java's answer is threads again — with different trade-offs.

  2. Channels and select: the whole API 45m

    Five rules, two traps, one direction arrow. Channels are not queues and not futures — they are synchronisation points.

  3. context: cancellation is an argument 35m

    Java interrupts threads and cancels futures. Go passes a context down every call, and reviewers will reject code that doesn't.

  4. Worker pools, errgroup, and the race detector 50m

    The three patterns you will actually write at work, plus the tool that makes concurrency bugs reproducible instead of mystical.

05

Composition over Spring

Constructor injection, functional options, small interfaces, and why struct tags replace annotations.

0 lessons

Stub — lessons land here as you finish each module.

06

The stdlib is your framework

net/http, database/sql, log/slog, html/template, embed. What you actually need to import.

0 lessons

Stub — lessons land here as you finish each module.

07

Testing and quality gates

Table-driven tests, httptest, testcontainers-go, native fuzzing, -race -shuffle in CI.

0 lessons

Stub — lessons land here as you finish each module.

08

Architecture and data access

cmd/, internal/, package by feature, sqlc instead of an ORM, migrations, graceful shutdown.

0 lessons

Stub — lessons land here as you finish each module.

09

Production: profiling and observability

pprof, slog, OTel, GOGC vs -Xmx, and profiling a real service under load.

0 lessons

Stub — lessons land here as you finish each module.

10

Capstones: three shipped services

CLI tool, REST service with Postgres, worker queue under load. This is the portfolio.

0 lessons

Stub — lessons land here as you finish each module.

11

Job-ready: interviews and CV

Go interview questions, take-home strategy, and rewriting your Java CV in Go terms.

0 lessons

Stub — lessons land here as you finish each module.