Назад к урокам

Указатели в Go

Урок объясняет, что такое указатели в Go, как они позволяют работать с адресами в памяти, разыменовывать значения, изменять внешние переменные и оптимизировать передачу данных в функции.

Начинающий10 min

📍 Указатели (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

Преимущества: - отсутствие копирования, - изменение данных в вызывающем коде, - удобная работа с большими структурами.


📘 Итоги

  • Указатели дают доступ к памяти по адресу.
  • & - получить адрес переменной.
  • * - разыменовать указатель.
  • Указатели позволяют изменять данные вне функции.
  • Используются для оптимизации и управления состоянием.
Указатели в Go | WebSchool