Date:

Go Pointers Mastery

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
  • x is an int variable.
  • &x gives the memory address of x.
  • p is a pointer to int (*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

  1. ❌ 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)!

Latest stories

Read More

LEAVE A REPLY

Please enter your comment!
Please enter your name here