Указатель хранит адрес переменной в памяти. *T — тип указателя на T. &x — взять адрес, *p — разыменовать (получить значение).
x := 42
p := &x // p *int, указывает на x
fmt.Println(*p) // 42
*p = 100
fmt.Println(x) // 100 — изменили через указатель
В Go нет арифметики указателей (как в C). Указатели нужны для:
- Изменения значения в функции (pass by pointer)
- Избежания копирования больших структур
- Обозначения «отсутствия значения» (
nil)
func increment(n *int) {
*n++
}