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