1. 使用场景
除了参数类型之外,写了很多完全重复的代码
2. 代码实例
package main
import (
"fmt"
)
type Number interface {
int | int32 | int64 | float32 | float64
}
func addNumber[T Number](a, b T) T {
return a + b
}
func addString[T string](a, b T) T {
return a + b
}
func printAny[T any](s []T) {
for i, t := range s {
fmt.Printf("%v = %v \n", i, t)
}
}
func sumNumbers[K comparable, V Number | string](m map[K]V) V {
var s V
for _, v := range m {
s += v
}
return s
}
func main() {
fmt.Println(addNumber(1, 2))
fmt.Println(addNumber(1.1, 2.2))
fmt.Println(addString("Hello", " go"))
str := []string{"a", "b", "c"}
printAny(str)
strs := map[string]string{"first": "hello ", "second": "world "}
ints := map[string]int64{"f": 123, "s": 456}
fmt.Println(sumNumbers(strs))
fmt.Println(sumNumbers(ints))
}
- 打印结果
3
3.3000000000000003
Hello go
0 = a
1 = b
2 = c
hello world
579