Ответ
Указатель в Go — это переменная, которая хранит адрес в памяти другой переменной. Он позволяет работать с данными не напрямую, а по ссылке, что дает возможность изменять исходное значение переменной из разных частей программы.
Ключевые операторы:
&
(оператор взятия адреса) — возвращает адрес переменной в памяти.*
(оператор разыменования) — позволяет получить доступ к значению, которое хранится по адресу в указателе, или изменить его.
Пример:
func main() {
x := 10
p := &x // p теперь хранит адрес переменной x
fmt.Println(x) // Выведет: 10
*p = 20 // Изменяем значение по адресу, который хранит p
fmt.Println(x) // Выведет: 20, так как изменилась исходная переменная x
}
Основные цели использования:
- Модификация данных: Для изменения аргументов, переданных в функцию (эффект "pass-by-reference").
- Оптимизация: Чтобы избежать копирования больших структур данных при передаче их в функции, вместо этого передается лишь небольшой указатель.
- Нулевое значение: Нулевое (zero value) значение для указателя —
nil
. Попытка разыменоватьnil
-указатель приведет к панике времени выполнения (panic
).