Что выведет код Senior Структуры, методы и интерфейсы обновлено
Что выведет Go: сравнение интерфейсов со слайсами внутри
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func main() {
defer func() {
fmt.Println("recovered:", recover())
}()
var x, y any = 1, "1"
fmt.Println(x == y)
var a, b any = []int{1}, []int{1}
fmt.Println(a == b)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: false, recovered: runtime error: comparing uncomparable type []int. Интерфейсы с разными динамическими типами просто не равны: false.
Что выведет
false
recovered: runtime error: comparing uncomparable type []int
Разбор
Интерфейсы с разными динамическими типами просто не равны: false. Когда типы совпадают и несравнимы (слайс), сравнение паникует во время выполнения. Компилятор пропускает код, потому что статический тип any сравним.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: type switch
Следующий вопрос
Проверка реализации интерфейса при компиляции
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error