Pointers in Go Programming Language

Hazar Bakir
lamalab
Published in
3 min readMay 17, 2024
Lama Lab

Understanding Pointers in Programming

Pointers are one of the most fundamental and powerful concepts in programming. Whether you’re a beginner or an experienced coder, mastering pointers can take your skills to the next level. In this article, we will explore what pointers are, why they are essential, and how to use them effectively in your code.

What Are Pointers?

Imagine you have a magical tool that can directly access and manipulate the memory of your computer. This is what pointers do! Pointers are variables that store memory addresses instead of actual data values. When you create a pointer to a variable, you are essentially storing the location of that variable in memory.

How to Use Pointers

Declaration

Declaring a pointer in Go is simple. You use the `*` operator to specify that you are creating a pointer. Here’s how to declare a pointer to an integer:

var p *int

Initialization

To initialize the pointer, you assign it the address of a variable using the `&` operator:

x := 10
p = &x
an example on a canvas

Practical Example

Let’s walk through a practical example to understand pointers better.

Step 1: Declare an Integer Variable

x := 10
fmt.Println("Value of x: ", x)
fmt.Println("Address of x: ", &x)
Output:

Value of x: 10
Address of x: 0xc000012150

Step 2: Declare a Pointer to an Integer

var p *int

Step 3: Initialize the Pointer with the Address of `x`

p = &x
fmt.Println("Pointer p: ", p)
fmt.Println("Value at pointer p: ", *p)
Output:

Pointer p: 0xc000012150
Value at pointer p: 10

Step 4: Modify the Value at the Address the Pointer is Pointing To

*p = 20
fmt.Println("Modified value of x: ", x)
Output:

Modified value of x: 20

Why Pointers?

Why should you care about pointers? Pointers are crucial for several reasons:

1. Memory Efficiency: Pointers allow you to manage memory directly, which can lead to more efficient programs.
2. Data Manipulation: Pointers enable you to manipulate data directly in memory, which can be faster than copying data around.
3. Dynamic Memory Allocation: Pointers are essential for dynamic memory allocation, which is crucial for creating flexible and scalable programs.

Real-World Example: Using Pointers for Efficiency

Consider the following example where we update a user session’s expiration time:

package main
import (
"fmt"
"time"
)


type UserSession struct {
UserID int
Username string
ExpirationTime time.Time
}

func updateSessionExpiration(session *UserSession) {
session.ExpirationTime = session.ExpirationTime.Add(1 * time.Hour)
}

func updateSessionExpirationWithoutPointer(session UserSession) UserSession {
session.ExpirationTime = session.ExpirationTime.Add(1 * time.Hour)
return session
}

In this example, `updateSessionExpiration` modifies the original session using a pointer, while `updateSessionExpirationWithoutPointer` takes a session by value (creating a copy) and returns a new session after modification.

When we modify the original session using a pointer, the changes made inside the function affect the original session object. However, when we pass the session by value and modify it inside the function, a copy of the session is created, and the changes only affect this copy. The original session remains unchanged.

Conclusion

Pointers might seem intimidating at first, but they are an incredibly powerful tool in programming. Understanding and mastering pointers will enable you to write more efficient, flexible, and powerful code. So dive in, experiment with pointers, and unlock a new level of programming expertise!

Sources Used in This Article:

YouTube Go Pointers

Docs:

1: A Tour Of Go Pointers
2:
GeeksForGeeks Golang Pointers

--

--