Что выведет код Junior Структуры, методы и интерфейсы обновлено
Что выведет Go: type switch
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func describe(v any) string {
switch x := v.(type) {
case nil:
return "nil"
case int, int64:
return fmt.Sprintf("целое %v", x)
case string:
return "строка длиной " + fmt.Sprint(len(x))
case error:
return "ошибка " + x.Error()
default:
return fmt.Sprintf("другое %T", x)
}
}
func main() {
fmt.Println(describe(nil))
fmt.Println(describe(int64(5)))
fmt.Println(describe("ёж"))
fmt.Println(describe(3.5))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: nil, целое 5, строка длиной 4, другое float64. nil-интерфейс попадает в case nil. int64 в ветку с двумя типами, там x остаётся any, но печатается как 5. len строки «ёж» в байтах: 4.
Что выведет
nil
целое 5
строка длиной 4
другое float64
Разбор
nil-интерфейс попадает в case nil. int64 в ветку с двумя типами, там x остаётся any, но печатается как 5. len строки «ёж» в байтах: 4. Дробное число уходит в default, %T даёт float64.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: сравнение структур и указателей
Следующий вопрос
Что выведет Go: сравнение интерфейсов со слайсами внутри
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error