HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В языке Go значение nil используется для обозначения отсутствия данных. Оно является нулевым значением для типов, которые работают с указателями (указатели, срезы, карты, каналы, функции, интерфейсы). Рассмотрим примеры тех типов, которые мы уже изучили</p>
1 <p>В языке Go значение nil используется для обозначения отсутствия данных. Оно является нулевым значением для типов, которые работают с указателями (указатели, срезы, карты, каналы, функции, интерфейсы). Рассмотрим примеры тех типов, которые мы уже изучили</p>
2 <h2>nil для указателей</h2>
2 <h2>nil для указателей</h2>
3 <p>Переменная указательного типа содержит nil, если не была явно инициализирована. Это означает, что она не указывает ни на какую область памяти.</p>
3 <p>Переменная указательного типа содержит nil, если не была явно инициализирована. Это означает, что она не указывает ни на какую область памяти.</p>
4 <p>Попытка разыменовать nil-указатель приводит к панике во время выполнения:</p>
4 <p>Попытка разыменовать nil-указатель приводит к панике во время выполнения:</p>
5 <p>Чтобы избежать ошибки, перед разыменованием указателя выполняется проверка:</p>
5 <p>Чтобы избежать ошибки, перед разыменованием указателя выполняется проверка:</p>
6 <h2>nil в полях структур</h2>
6 <h2>nil в полях структур</h2>
7 <p>Если структура содержит указательное поле, это поле по умолчанию будет nil, если его не инициализировать.</p>
7 <p>Если структура содержит указательное поле, это поле по умолчанию будет nil, если его не инициализировать.</p>
8 <p>Такую структуру можно проверить перед использованием указателя в поле:</p>
8 <p>Такую структуру можно проверить перед использованием указателя в поле:</p>
9 <h2>Вызов методов на nil</h2>
9 <h2>Вызов методов на nil</h2>
10 <p>Если метод вызывается на значении, равном nil, и этот метод<strong>не обращается к полям</strong>внутри объекта, то ошибка не возникает:</p>
10 <p>Если метод вызывается на значении, равном nil, и этот метод<strong>не обращается к полям</strong>внутри объекта, то ошибка не возникает:</p>
11 <p>Такое поведение разрешено в Go по дизайну. Аргумент l - это просто указатель на Logger, и метод может быть вызван даже на nil,<strong>если внутри метода нет обращения к данным</strong>. Это позволяет, например, реализовать "пустые" или "заглушки" (no-op реализации), где метод ничего не делает, но при этом вызывается безопасно.</p>
11 <p>Такое поведение разрешено в Go по дизайну. Аргумент l - это просто указатель на Logger, и метод может быть вызван даже на nil,<strong>если внутри метода нет обращения к данным</strong>. Это позволяет, например, реализовать "пустые" или "заглушки" (no-op реализации), где метод ничего не делает, но при этом вызывается безопасно.</p>
12 <p>Но если метод попытается обратиться к данным внутри структуры, произойдёт паника:</p>
12 <p>Но если метод попытается обратиться к данным внутри структуры, произойдёт паника:</p>
13 <h2>Вывод</h2>
13 <h2>Вывод</h2>
14 <p>nil - это значение по умолчанию для ссылочных типов, таких как указатели. Оно часто используется в Go и требует проверки перед обращением к данным.</p>
14 <p>nil - это значение по умолчанию для ссылочных типов, таких как указатели. Оно часто используется в Go и требует проверки перед обращением к данным.</p>