Skip to content

泛型

泛型的关键不是 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
}