Go Zero Value of Pointer 🎯

beginner
25 min

Go Zero Value of Pointer 🎯

Welcome to our deep dive into the world of Go (Golang)! In this lesson, we'll explore one of the unique aspects of Go - the value of a pointer when it's zeroed out. Let's embark on this exciting journey together!

Understanding Pointers in Go 📝

Before we delve into the value of a zeroed-out pointer, let's first understand what a pointer is and how it works in Go.

In Go, a pointer is a variable that stores the memory address of another variable. Pointers are useful for handling dynamic memory allocation and for manipulating complex data structures.

go
package main import "fmt" func main() { var myInt int var myPtr *int // myPtr is a pointer to an int fmt.Println("Address of myInt:", &myInt) fmt.Println("Value of myPtr:", myPtr) }

In the above example, we've declared a variable myInt and a pointer myPtr to an int. The & operator is used to get the memory address of myInt.

The Value of a Zeroed-Out Pointer 💡

Now, let's talk about what happens when we zero out a pointer:

go
package main import "fmt" func main() { var myPtr *int = nil // myPtr is now a zeroed-out pointer fmt.Println("Value of myPtr:", myPtr) }

In this example, we've assigned nil to the pointer myPtr. This means that myPtr does not point to any memory location. The output of the above code will be Value of myPtr: <nil>.

Now, you might be wondering, "What's so special about a zeroed-out pointer?"

Well, in Go, a zeroed-out pointer behaves differently compared to a non-zeroed-out pointer. When a pointer is zeroed out (nil), it can be assigned to any other pointer type without an explicit type conversion. This is a handy feature when dealing with interfaces and polymorphism in Go.

Real-World Example 🎯

Let's take a look at a practical example where a zeroed-out pointer comes in handy:

go
package main import "fmt" type Shape interface { Area() float64 } type Circle struct { radius float64 } type Rectangle struct { width, height float64 } func main() { var myShape Shape var myCircle Circle var myRectangle Rectangle // Assign a Circle object to the Shape interface using a zeroed-out pointer myShape = &myCircle myCircle.radius = 5.0 // Calculate and print the area of the Circle fmt.Println("Area of Circle:", myShape.Area()) // Assign a Rectangle object to the Shape interface using a zeroed-out pointer myShape = &myRectangle myRectangle.width = 4.0 myRectangle.height = 6.0 // Calculate and print the area of the Rectangle fmt.Println("Area of Rectangle:", myShape.Area()) } func (c Circle) Area() float64 { return 3.14 * c.radius * c.radius } func (r Rectangle) Area() float64 { return r.width * r.height }

In this example, we have an interface named Shape with a Area() method. We also have two struct types Circle and Rectangle. In the main function, we create instances of Circle and Rectangle and assign them to a zeroed-out Shape pointer. This way, we can easily calculate and print the area of both the circle and the rectangle using the same Shape pointer.

Quiz Time! 🎯

Quick Quiz
Question 1 of 1

What happens when a pointer is zeroed out (`nil`) in Go?

That's it for today! We hope you enjoyed learning about the value of a zeroed-out pointer in Go. Stay tuned for more in-depth lessons on this exciting programming language!

Happy coding! 🚀🌟