"Pointers are simple: they just point to things. The complexity lies in understanding what they point to."
<aside> 🔗
Related Topics:
Go's pointer semantics sit between C's raw memory access and Java's fully managed references. Understanding when Go passes by value vs. reference is essential for writing correct, efficient code.
| Topic | Key Insight |
|---|---|
| Slices & Headers | Slices are headers (ptr, len, cap) — not the data itself |
| Pointer Nuances | Method receivers, nil checks, range loops, escape analysis |
| Advanced Patterns | Optional values, JSON omitempty, atomics, config merging |
| Operation | Pointer? | Why |
|---|---|---|
s[i] = x |
❌ No | Modifying existing data |
s = append(s, x) |
✅ Yes | Changes len/cap |
s = s[:n] |
✅ Yes | Changes len |
m["key"] = x |
❌ No | Maps are reference types |
| Struct method that mutates | ✅ Yes | Pointer receiver needed |