Что выведет код Middle Дженерики обновлено
Что выведет Go: ограничение с тильдой и свой тип
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
type Celsius float64
type Number interface {
~int | ~float64
}
func Sum[T Number](xs ...T) T {
var s T
for _, x := range xs {
s += x
}
return s
}
func main() {
t := Sum(Celsius(20.5), Celsius(1.5))
fmt.Printf("%v %T\n", t, t)
fmt.Println(Sum[int]())
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 22 main.Celsius, 0. Благодаря float64 тип Celsius удовлетворяет ограничению, и результат имеет тип Celsius, а не float64.
Что выведет
22 main.Celsius
0
Разбор
Благодаря ~float64 тип Celsius удовлетворяет ограничению, и результат имеет тип Celsius, а не float64. Вызов без аргументов с явным [int] возвращает нулевое значение var s T.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.