Основы Go
Теория: Указатели
Go — язык с передачей аргументов по значению. Это значит, что при передаче переменной в функцию создаётся её копия, и любые изменения внутри функции не затрагивают оригинал. Но если нужно изменить переменную изнутри функции, используется указатель.
Передача по значению
В этом примере переменная x передаётся по значению. Функция получает копию значения, и изменение n не влияет на x.
Передача указателя
Здесь мы передаём в функцию не значение, а указатель на переменную x. Оператор * используется для получения значения по адресу (разыменования). Изменение *number внутри функции приводит к изменению исходной переменной.
Если присвоить без разыменования внутри функции, то оригинальная переменная x не изменится.
Как это работает
В Go всё передаётся по значению. Но если вы передаёте указатель, то копируется сам указатель (то есть адрес), и обе переменные указывают на одну и ту же область памяти.
Пример со структурой
Указатели особенно полезны при работе со структурами. Структуры могут содержать много полей, и копирование каждой из них при передаче в функцию может быть неэффективным. Кроме того, иногда нужно изменить структуру внутри функции.
Передача структуры по значению:
В этом примере структура User передаётся по значению. Функция rename() работает с копией, а не с оригиналом.
Передача указателя на структуру:
Теперь в функцию передаётся указатель на User. Мы получаем доступ к оригинальной структуре и можем её изменить. Таким образом мы получаем привычное поведение для других языков, где составные данные передаются по ссылкам.
Go также позволяет обращаться к полям структуры через указатель без явного разыменования:
Это сделано для удобства — компилятор сам вставляет *, если это безопасно.
Когда использовать указатели
- Когда нужно изменить значение переменной или структуры внутри функции
- Когда объект большой, и копировать его неэффективно





