go 1.18 泛型
要支持任一类型的值,该单个函数将需要一种方法来声明它支持的类型。另一方面,调用代码需要一种方法来指定它是使用整数映射还是浮点映射。
package main
import "fmt"
func main() {
// 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), // 不省略类型 [string, int64]
SumIntsOrFloats(floats), // 省略类型
)
}
// SumInts adds together the values of m.
func SumInts(m map[string]int64) int64 {
var s int64
for _, v := range m {
s += v
}
return s
}
// SumFloats adds together the values of m.
func SumFloats(m map[string]float64) float64 {
var s float64
for _, v := range m {
s += v
}
return s
}
// 要支持任一类型的值,该单个函数将需要一种方法来声明它支持的类型。
// 另一方面,调用代码需要一种方法来指定它是使用整数映射还是浮点映射。
func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V {
var s V
for _, v := range m {
s += v
}
return s
}
life is a game

浙公网安备 33010602011771号