Pointers in Go
Golang Concepts
Go Pointers
Pointers reference a location in memory where a value is stored rather than the value itself. (They point to something else) By using a pointer (*int) the zero function is able to modify the original variable.
In Go a pointer is represented using the * (asterisk)
character followed by the type of the stored value. In the zero function xPtr
is a pointer to an int
.
When we call a function that takes an argument, that argument is copied to the function:
func zero(x int) {
x = 0
}
func main() {
x := 5
zero(x)
fmt.Println(x) // x is still 5
}
In this program the zero function will not modify the original x
variable in the main function. But what if we wanted to? One way to do this is to use a special data type known as a pointer:
func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x is 0
}
Pointers with new function
Another way to get a pointer is to use the built-in new
function:
func one(xPtr *int) {
*xPtr = 1
}
func main() {
xPtr := new(int)
one(xPtr)
fmt.Println(*xPtr) // x is 1
}