// *** before: ***
// an interface could ask for methods only, not for operators like +,
// so generic arithmetic would have to go through reflect
// *** in version 1.18: ***
type Number interface {
~int | ~int64 | ~float64
}
func Sum[T Number](nums []T) T {
var total T
for _, n := range nums {
total += n
}
return total
}
type Meters float64
fmt.Println(Sum([]Meters{1.5, 2.5})) // ~float64 also allows own types over
//float64