Выбор ответа Senior Структуры, методы и интерфейсы обновлено
Сравнение интерфейсов с несравнимым типом
Вопрос
Что произойдёт при сравнении a == b, где var a, b any = []int{1}, []int{1}?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: panic: comparing uncomparable type []int. Интерфейсы сравнимы на этапе компиляции, поэтому код собирается.
Варианты ответа
true: содержимое слайсов совпадаетfalse, потому что это разные слайсы- panic: comparing uncomparable type []intправильный ответ
- Ошибка компиляции: слайсы несравнимы
Разбор
Интерфейсы сравнимы на этапе компиляции, поэтому код собирается. Во время выполнения сравниваются динамические типы, и если они совпали и несравнимы (слайс, мапа, функция), рантайм паникует. Так же паникует использование такого интерфейса ключом мапы. Сравнить содержимое слайсов: slices.Equal.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error