4 вопросов
Указатели в Go позволяют передавать данные по ссылке. В отличие от C, арифметика указателей запрещена. Операторы & (взятие адреса) и * (разыменование) - базовые конструкции.
&? 🟢 Лёгкий
▶
&x возвращает указатель на x (тип *T). Не путать с побитовым И (a & b) - там оба операнда числа. & перед переменной - унарный оператор взятия адреса.
Подробнее →* перед указателем? 🟢 Лёгкий
▶
*p - получает значение, на которое указывает p. Если p = &x, то *p - это x. Разыменование nil-указателя вызывает panic. Не путать с * в объявлении типа (*int - тип «указатель на int»).
Подробнее →Go запрещает арифметику указателей для безопасности памяти. Нельзя сделать p++ или p + 4 как в C. Через пакет unsafe можно, но это считается плохой практикой.
Подробнее →new(int)? 🟢 Лёгкий
▶
new(T) выделяет память для значения типа T, инициализирует zero value и возвращает указатель *T. new(int) вернёт *int, указывающий на 0.
Подробнее →