HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Go - язык с передачей аргументов по значению. Это значит, что при передаче переменной в функцию создаётся её копия, и любые изменения внутри функции не затрагивают оригинал. Но если нужно изменить переменную изнутри функции, используется указатель.</p>
1 <p>Go - язык с передачей аргументов по значению. Это значит, что при передаче переменной в функцию создаётся её копия, и любые изменения внутри функции не затрагивают оригинал. Но если нужно изменить переменную изнутри функции, используется указатель.</p>
2 <h2>Передача по значению</h2>
2 <h2>Передача по значению</h2>
3 <p>В этом примере переменная x передаётся по значению. Функция получает копию значения, и изменение n не влияет на x.</p>
3 <p>В этом примере переменная x передаётся по значению. Функция получает копию значения, и изменение n не влияет на x.</p>
4 <h2>Передача указателя</h2>
4 <h2>Передача указателя</h2>
5 <p>Здесь мы передаём в функцию не значение, а указатель на переменную x. Оператор * используется для получения значения по адресу (разыменования). Изменение *number внутри функции приводит к изменению исходной переменной.</p>
5 <p>Здесь мы передаём в функцию не значение, а указатель на переменную x. Оператор * используется для получения значения по адресу (разыменования). Изменение *number внутри функции приводит к изменению исходной переменной.</p>
6 <p>Если присвоить без разыменования внутри функции, то оригинальная переменная x не изменится.</p>
6 <p>Если присвоить без разыменования внутри функции, то оригинальная переменная x не изменится.</p>
7 <h2>Как это работает</h2>
7 <h2>Как это работает</h2>
8 <p>В Go всё передаётся по значению. Но если вы передаёте указатель, то копируется сам указатель (то есть адрес), и обе переменные указывают на одну и ту же область памяти.</p>
8 <p>В Go всё передаётся по значению. Но если вы передаёте указатель, то копируется сам указатель (то есть адрес), и обе переменные указывают на одну и ту же область памяти.</p>
9 <h2>Пример со структурой</h2>
9 <h2>Пример со структурой</h2>
10 <p>Указатели особенно полезны при работе со структурами. Структуры могут содержать много полей, и копирование каждой из них при передаче в функцию может быть неэффективным. Кроме того, иногда нужно изменить структуру внутри функции.</p>
10 <p>Указатели особенно полезны при работе со структурами. Структуры могут содержать много полей, и копирование каждой из них при передаче в функцию может быть неэффективным. Кроме того, иногда нужно изменить структуру внутри функции.</p>
11 <p>Передача структуры по значению:</p>
11 <p>Передача структуры по значению:</p>
12 <p>В этом примере структура User передаётся по значению. Функция rename() работает с копией, а не с оригиналом.</p>
12 <p>В этом примере структура User передаётся по значению. Функция rename() работает с копией, а не с оригиналом.</p>
13 <p>Передача указателя на структуру:</p>
13 <p>Передача указателя на структуру:</p>
14 <p>Теперь в функцию передаётся указатель на User. Мы получаем доступ к оригинальной структуре и можем её изменить. Таким образом мы получаем привычное поведение для других языков, где составные данные передаются по ссылкам.</p>
14 <p>Теперь в функцию передаётся указатель на User. Мы получаем доступ к оригинальной структуре и можем её изменить. Таким образом мы получаем привычное поведение для других языков, где составные данные передаются по ссылкам.</p>
15 <p>Go также позволяет обращаться к полям структуры через указатель без явного разыменования:</p>
15 <p>Go также позволяет обращаться к полям структуры через указатель без явного разыменования:</p>
16 <p>Это сделано для удобства - компилятор сам вставляет *, если это безопасно.</p>
16 <p>Это сделано для удобства - компилятор сам вставляет *, если это безопасно.</p>
17 <h2>Когда использовать указатели</h2>
17 <h2>Когда использовать указатели</h2>
18 <ul><li>Когда нужно изменить значение переменной или структуры внутри функции</li>
18 <ul><li>Когда нужно изменить значение переменной или структуры внутри функции</li>
19 <li>Когда объект большой, и копировать его неэффективно</li>
19 <li>Когда объект большой, и копировать его неэффективно</li>
20 </ul>
20 </ul>