🧠 Что такое указатели?

Указатель — это переменная, которая хранит адрес другой переменной. В Go указатели позволяют работать с памятью напрямую и изменять значения в функциях.


🧪 Почему это важно?

  • Передача по ссылке: экономит ресурсы при передаче больших структур.
  • Изменение значений внутри функций.
  • Создание эффективных алгоритмов и структур данных.

🧷 Объявление и использование указателей

var a int = 10
var p *int = &a

fmt.Println(*p) // 10
*p = 20
fmt.Println(a) // 20
  • &a — оператор взятия адреса.
  • *p — оператор разыменования (получение значения по адресу).

🎯 Функции с указателями

Передача переменной по указателю позволяет функции менять значение переменной на месте:

func increment(n *int) {
    *n++
}

x := 5
increment(&x)
fmt.Println(x) // 6

🏗 Указатели в структурах

Указатели широко используются со структурами, чтобы:

  • не копировать всю структуру,
  • изменять поля напрямую,
  • экономить память:
type User struct {
    Name string
}

func updateName(u *User, name string) {
    u.Name = name
}

user := User{Name: "Alex"}
updateName(&user, "Max")
fmt.Println(user.Name) // Max

🔄 Значение по умолчанию

Указатели по умолчанию равны nil. Проверка на nil важна:

var p *int
if p != nil {
    fmt.Println(*p)
} else {
    fmt.Println("Указатель пуст")
}

📌 Главное из главы

  • Указатель хранит адрес переменной, * используется для получения значения.
  • Указатели позволяют изменять значения в функциях.
  • Часто используются с структурами.
  • Проверяй указатели на nil перед использованием.

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