Что выведет код 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 ошибок.