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>