Тип указателя
Указатель (pointer) в Go — это тип данных, который хранит адрес переменной в памяти, а не само значение.
В первом параметре мы передаем переменную, адрес которой нужно получить с помощью оператора &.
Во втором параметре мы передаем значение указателя для разыменования с помощью оператора *.
Указатели позволяют изменять переменные внутри функций и эффективно работать с большими структурами данных.
Синтаксис
var ptr *T // объявление указателя на тип T
ptr = &var // присвоение адреса переменной
*ptr = value // разыменование и изменение значения
Пример
Объявим переменную x типа int и получим ее адрес с помощью оператора &:
package main
import "fmt"
func main() {
x := 42
ptr := &x
fmt.Println(ptr) // адрес переменной
fmt.Println(*ptr) // значение по адресу
}
Результат выполнения кода:
"0xc00001a0b0"
"42"
В первом выводе мы видим адрес переменной x, во втором — значение по этому адресу.
Пример
Передадим указатель в функцию, чтобы изменить значение переменной:
package main
import "fmt"
func changeValue(p *int) {
*p = 100
}
func main() {
x := 42
fmt.Println(x) // 42
changeValue(&x)
fmt.Println(x) // 100
}
Результат выполнения кода:
"42"
"100"
Функция changeValue принимает указатель на int и изменяет значение по этому адресу,
что отражается на исходной переменной x.
Пример
Работа с нулевым указателем (nil). Проверим, равен ли указатель nil, и безопасно разыменуем его:
package main
import "fmt"
func main() {
var ptr *int // нулевой указатель
if ptr == nil {
fmt.Println("pointer is nil")
}
// безопасная проверка перед разыменованием
if ptr != nil {
fmt.Println(*ptr)
}
}
Результат выполнения кода:
"pointer is nil"
Разыменование нулевого указателя вызывает панику, поэтому всегда проверяйте указатель на nil перед использованием.