package main
import"fmt"type Number interface{int64|float64}funcmain(){// Initialize a map for the integer values
ints :=map[string]int64{"first":34,"second":12,}// Initialize a map for the float values
floats :=map[string]float64{"first":35.98,"second":26.99,}
fmt.Printf("Non-Generic Sums: %v and %v\n",SumInts(ints),SumFloats(floats))
fmt.Printf("Generic Sums: %v and %v\n",
SumIntsOrFloats[string,int64](ints),
SumIntsOrFloats[string,float64](floats))
fmt.Printf("Generic Sums, type parameters inferred: %v and %v\n",SumIntsOrFloats(ints),SumIntsOrFloats(floats))
fmt.Printf("Generic Sums with Constraint: %v and %v\n",SumNumbers(ints),SumNumbers(floats))}// SumInts adds together the values of m.funcSumInts(m map[string]int64)int64{var s int64for_, v :=range m {
s += v
}return s
}// SumFloats adds together the values of m.funcSumFloats(m map[string]float64)float64{var s float64for_, v :=range m {
s += v
}return s
}// SumIntsOrFloats sums the values of map m. It supports both floats and integers// as map values.func SumIntsOrFloats[K comparable, V int64|float64](m map[K]V) V {var s V
for_, v :=range m {
s += v
}return s
}// SumNumbers sums the values of map m. Its supports both integers// and floats as map values.func SumNumbers[K comparable, V Number](m map[K]V) V {var s V
for_, v :=range m {
s += v
}return s
}