Pointers
Pointers in Go are tamer than their C counterparts and rarer than in Java. You reach for them in three specific situations: when a function needs to mutate the caller's variable, when a value is large enough that copying it would cost more than passing a reference, and when a zero value would be ambiguous and you need "this is missing" to be representable. For almost everything else, plain values are enough.
Five short lessons cover the whole picture: the & and * operators, the addressability rule plus why &local is safe thanks to escape analysis, passing pointers to functions, nil pointers and how to guard against them, and the three ways to create a pointer (&x, new(T), and the &T{...} form that takes over in the next chapter). Each lesson is small and builds on the previous one.