泛型
泛型的关键不是 T。而是:T 能做什么?
go
func Print[T any](v T) {
fmt.Println(v)
}类型约束
any
任意类型
comparable
可以使用 == != 的类型
不能是:
- slice
- map
- function
自定义约束
go
type Number interface {
~int | ~int64 | ~float64
}
func Add[T Number](a, b T) T {
return a + b
}~ 表示底层类型匹配。
大于小于
go
import "golang.org/x/exp/constraints"
func Max[T constraints.Ordered](a, b T) T {
if a > b {
return a
}
return b
}