Основы Go
Теория: Nil
В языке Go значение nil используется для обозначения отсутствия данных.
Оно является нулевым значением для типов, которые работают с указателями (указатели, срезы, карты, каналы, функции, интерфейсы). Рассмотрим примеры тех типов, которые мы уже изучили
nil для указателей
Переменная указательного типа содержит nil, если не была явно инициализирована. Это означает, что она не указывает ни на какую область памяти.
Попытка разыменовать nil-указатель приводит к панике во время выполнения:
Чтобы избежать ошибки, перед разыменованием указателя выполняется проверка:
nil в полях структур
Если структура содержит указательное поле, это поле по умолчанию будет nil, если его не инициализировать.
Такую структуру можно проверить перед использованием указателя в поле:
Вызов методов на nil
Если метод вызывается на значении, равном nil, и этот метод не обращается к полям внутри объекта, то ошибка не возникает:
Такое поведение разрешено в Go по дизайну. Аргумент l — это просто указатель на Logger, и метод может быть вызван даже на nil, если внутри метода нет обращения к данным. Это позволяет, например, реализовать "пустые" или "заглушки" (no-op реализации), где метод ничего не делает, но при этом вызывается безопасно.
Но если метод попытается обратиться к данным внутри структуры, произойдёт паника:
Вывод
nil — это значение по умолчанию для ссылочных типов, таких как указатели. Оно часто используется в Go и требует проверки перед обращением к данным.
