Выбор ответа Middle Структуры, методы и интерфейсы обновлено
Проверка реализации интерфейса при компиляции
Вопрос
Что делает строка var _ http.Handler = (*Server)(nil)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Проверяет при компиляции, что Server реализует http.Handler. Присваивание в пустой идентификатор не создаёт полезной переменной, а nil-указатель не требует памяти.
Варианты ответа
- Регистрирует Server как HTTP-обработчик по умолчанию в DefaultServeMux
- Проверяет при компиляции, что
*Serverреализуетhttp.Handlerправильный ответ - Создаёт глобальный nil-сервер, который заполняется в init
- Запрещает создавать Server по значению, только через указатель
Разбор
Присваивание в пустой идентификатор не создаёт полезной переменной, а nil-указатель не требует памяти. Зато компилятор проверит совместимость типов, и при изменении сигнатуры метода ошибка всплывёт сразу у реализации. Ничего не регистрируется, и создавать Server по значению по-прежнему можно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: сравнение интерфейсов со слайсами внутри
Следующий вопрос
Где объявлять интерфейс в Go
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error