Вопрос на собеседовании · Go-разработчик

Когда nil-интерфейс не равен nil?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 10 августа 2026 г.Встречается почти всегда
Короткий ответ

Значение интерфейса в Go содержит динамический тип и динамическое значение. Интерфейс равен nil только когда обе части отсутствуют. Если в интерфейс положить nil-указатель конкретного типа, динамический тип останется, поэтому сам интерфейс уже не равен nil.

Особенно опасен этот случай при возврате error: функция может вернуть указатель на собственный тип ошибки, равный nil, но после преобразования к error вызывающий код увидит ненулевой интерфейс.

01 · Структура ответа

Что важно сказать интервьюеру

Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:

Пара интерфейса условно выглядит как (type, value).
(nil, nil) равен nil, а (*MyError, nil) — нет.
Лучше явно возвращать nil как error, когда ошибки нет.
Проверка через reflection редко нужна, если API спроектирован корректно.

02 · Пример

Как объяснить на практике

Переменная var customErr *MyError равна nil. После присваивания var err error = customErr выражение err != nil истинно, потому что интерфейс хранит тип *MyError, хотя его динамическое значение — nil.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Считать, что любое nil-значение внутри интерфейса делает интерфейс nil.
Возвращать типизированный nil-указатель из функции с результатом error.
Исправлять проблему повсеместным reflect вместо исправления контракта функции.

04 · Углубление

Что могут спросить следом

  1. Из чего состоит значение интерфейса?
  2. Как typed nil попадает в error?
  3. Как безопасно вернуть пользовательскую ошибку?

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с опорой.

Потренировать ответ