📍 Указатели (Pointers) в Go
Указатели позволяют работать с памятью напрямую и изменять данные вне текущей области видимости. Они используются для оптимизации, управления состоянием программы и передачи больших структур без копирования.
🔧 Передача параметров по значению
В Go аргументы функций передаются по значению - то есть копируются. Это означает:
- функция получает копию данных,
- изменения внутри функции не влияют на оригинал,
- большие структуры копировать дорого.
Указатели позволяют изменить это поведение.
📌 Что такое указатель?
Указатель - это переменная, которая хранит адрес в памяти. Чтобы получить значение по адресу, используют разыменование.
Свойства указателя:
- хранит адрес объекта,
- позволяет менять оригинальные данные,
- разыменование (
*ptr) даёт доступ к значению по адресу.
🛠 Создание указателей
Получение указателя через &:
x := 10
ptr := &x
Объявление указателя:
var p *int
🎯 Разыменование указателя
Используется оператор *:
x := 10
ptr := &x
fmt.Println(*ptr) // 10
*ptr = 20
fmt.Println(x) // 20
Изменение через указатель меняет оригинальную переменную.
🧠 Визуализация
Представим:
big := 998
bigPtr := &big
bigPtr хранит адрес big, а *bigPtr даёт доступ к её значению.
*bigPtr += 1
// Теперь big == 999
🔁 Указатели в функциях
Используются, чтобы функция могла менять внешние переменные:
func increment(x *int) {
*x++
}
num := 5
increment(&num)
// num == 6
Преимущества: - отсутствие копирования, - изменение данных в вызывающем коде, - удобная работа с большими структурами.
📘 Итоги
- Указатели дают доступ к памяти по адресу.
&- получить адрес переменной.*- разыменовать указатель.- Указатели позволяют изменять данные вне функции.
- Используются для оптимизации и управления состоянием.