Выбор ответа Middle Структуры, методы и интерфейсы обновлено

Проверка реализации интерфейса при компиляции

Вопрос

Что делает строка var _ http.Handler = (*Server)(nil)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Проверяет при компиляции, что Server реализует http.Handler. Присваивание в пустой идентификатор не создаёт полезной переменной, а nil-указатель не требует памяти.

Варианты ответа

  1. Регистрирует Server как HTTP-обработчик по умолчанию в DefaultServeMux
  2. Проверяет при компиляции, что *Server реализует http.Handlerправильный ответ
  3. Создаёт глобальный nil-сервер, который заполняется в init
  4. Запрещает создавать Server по значению, только через указатель

Разбор

Присваивание в пустой идентификатор не создаёт полезной переменной, а nil-указатель не требует памяти. Зато компилятор проверит совместимость типов, и при изменении сигнатуры метода ошибка всплывёт сразу у реализации. Ничего не регистрируется, и создавать Server по значению по-прежнему можно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.