"Pointers are simple: they just point to things. The complexity lies in understanding what they point to."

<aside> 🔗

Related Topics:


Overview

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.


Core Concepts

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

Quick Reference

When You Need Pointers

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

Reference Types (No Pointer Needed for Element Access)

Value Types (Copied When Passed)