Go enables you to use pointers. Similar as in other languages like C.
- A pointer holds the memory address of a value
*Tis a pointer to aTvalue
i := 42
// Create a pointer that is not assigned to anything. It's nil
var p *int
// Assign the address of i to the pointer
p = &i
fmt.Println(p) // prints the memory address
The *operator itself denotes the pointer's underlying value.
Therefore, while pin the example is the memory address, *preturns the value "behind" the memory address.
When to use pointers
There are mainly two use cases for pointers:
- If you need direct access to the value
- If copying a value to a function or method is too expensive, e. g. for huge strings. Then, using a pointer for passing the value will make the function much faster
More extensible example
func main() {
var num int = 42;
fmt.Println(&num) // Memory address
ref := &num
fmt.Println(*ref) // Deferencing "42"
}
Next Chapter: Structs