Тип указателя

Указатель (pointer) в Go — это тип данных, который хранит адрес переменной в памяти, а не само значение. В первом параметре мы передаем переменную, адрес которой нужно получить с помощью оператора &. Во втором параметре мы передаем значение указателя для разыменования с помощью оператора *. Указатели позволяют изменять переменные внутри функций и эффективно работать с большими структурами данных.

Синтаксис

govar ptr *T    // объявление указателя на тип T
ptr = &var    // присвоение адреса переменной
*ptr = value  // разыменование и изменение значения

Пример

Объявим переменную x типа int и получим ее адрес с помощью оператора &:

gopackage main

import "fmt"

func main() {
  x := 42
  ptr := &x
  fmt.Println(ptr)  // адрес переменной
  fmt.Println(*ptr) // значение по адресу
}

Результат выполнения кода:

go"0xc00001a0b0"
"42"

В первом выводе мы видим адрес переменной x, во втором — значение по этому адресу.

Пример

Передадим указатель в функцию, чтобы изменить значение переменной:

gopackage main

import "fmt"

func changeValue(p *int) {
  *p = 100
}

func main() {
  x := 42
  fmt.Println(x) // 42
  changeValue(&x)
  fmt.Println(x) // 100
}

Результат выполнения кода:

go"42"
"100"

Функция changeValue принимает указатель на int и изменяет значение по этому адресу, что отражается на исходной переменной x.

Пример

Работа с нулевым указателем (nil). Проверим, равен ли указатель nil, и безопасно разыменуем его:

gopackage main

import "fmt"

func main() {
  var ptr *int // нулевой указатель
  if ptr == nil {
    fmt.Println("pointer is nil")
  }
  // безопасная проверка перед разыменованием
  if ptr != nil {
    fmt.Println(*ptr)
  }
}

Результат выполнения кода:

go"pointer is nil"

Разыменование нулевого указателя вызывает панику, поэтому всегда проверяйте указатель на nil перед использованием.

Смотрите также

  • тип array,
    который представляет фиксированный набор значений
  • тип slice,
    который представляет динамический массив
  • функцию new,
    которая выделяет память и возвращает указатель на нулевое значение
  • тип map,
    который хранит пары ключ-значение и передается по ссылке