Изменения в новых версиях / Go 1.18

// *** before: ***
// интерфейс требовал только методы, а не операторы вроде +,
// поэтому обобщённую арифметику пришлось бы писать через 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.52.5})) // ~float64 разрешает и свои типы поверх
//float64