Указатели в Go: как получить их значения
Есть два способа получить ненулевое значение указателя:
-
Встроенная функция new может использоваться для выделения памяти для значения любого типа. new(T) выделит память для T значения (анонимной переменной) и вернет адрес T значения. Выделенное значение является нулевым значением типа T. Возвращенный адрес рассматривается как значение указателя типа *T.
-
Мы также можем взять адреса значений, к которым можно обратиться в Go. Для адресуемого значения t типа T мы можем использовать выражение &t для получения адреса t, где & — оператор для получения адресов значений. Тип &t рассматривается как *T.
Адресуемое значение означает значение, которое размещено где-то в памяти. Сейчас нам достаточно знать, что все переменные являются адресуемыми, тогда как константы, вызовы функций и явные результаты преобразования не адресуются. Когда переменная объявляется, среда выполнения Go выделяет часть памяти для этой переменной. Начальный адрес этого фрагмента памяти является адресом переменной.
Разыменование указателя
Учитывая значение p указателя, базовый тип которого равен T, как ты можешь получить значение по адресу, хранящемуся в указателе, то есть значение, на которое ссылается указатель? Просто используй выражение *p, где * называется оператором разыменования, *p называется разыменованием указателя p. Разыменование указателя — это процесс, обратный взятию адреса. Результатом *p является значение типа T (базовый тип типа p).
Разыменование нулевого указателя вызывает панику во время выполнения.
В следующей программе показаны некоторые примеры получения адреса и разыменования указателя.

На следующем рисунке показаны отношения значений, используемых в приведенной выше программе.
