Pointers in Go

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
}

Previous Article

Next Article