Go (Golang) Pointers: A Comprehensive Guide
What is a Pointer?
A pointer is a variable that holds the memory address of another variable.
Analogy:
Think of a variable as a house and its value as a person living inside. A pointer is like the house’s address written on a note. You don’t carry the person – you carry the address.
Basic Pointer Syntax in Go
var x int = 10
var p *int = &x
xis anintvariable.&xgives the memory address ofx.pis a pointer toint(*int) that stores that address.
Dereferencing:
To get the value stored at the pointer address:
fmt.Println(*p) // Output: 10
Why Use Pointers?
- Avoid copying large values (performance gain).
- Modify values inside functions.
- Work with dynamic data structures (like linked lists, trees).
- Share state between functions or goroutines.
Example: Modify Value via Pointer
func update(val *int) {
*val = 99
}
func main() {
num := 50
update(&num)
fmt.Println(num) // Output: 99
}
✅ *val = 99 changes the original num since we’re working with its memory address.
Value vs Pointer
| Feature | Value (Copy) | Pointer (Reference) |
|---|---|---|
| Memory usage | More (copies value) | Less (copies address) |
| Modify original? | ❌ No | ✅ Yes |
| Performance | Slower with large data | Faster |
The new() Keyword
ptr := new(int)
*p = 77
fmt.Println(*p) // Output: 77
Pointers with Structs
type User struct {
Name string
}
func rename(u *User) {
u.Name = "Alice"
}
func main() {
user := User{Name: "Bob"}
rename(&user)
fmt.Println(user.Name) // Output: Alice
}
✅ Modifications inside the function persist outside because we pass a pointer.
Common Pitfalls
- ❌ Dereferencing a nil pointer
var p *int
fmt.Println(*p) // panic: runtime error: invalid memory address
Passing by Value vs Pointer (Recap)
| Case | Use Pointer? |
|---|---|
| Modify original data | ✅ Yes |
| Pass large structs | ✅ Yes |
| Read-only small values | ❌ No |
Conclusion
Pointers are a core concept in Go that unlock performance, control, and flexibility. By mastering pointers, you gain a deeper understanding of how data flows and memory works under the hood – critical skills for any serious Go developer.
✨ Remember: With great power (pointers), comes great responsibility (memory safety)!

