约束
any
概念
any:interface{}的别名;- 操作限制: 只可使用所有类型都支持的操作;
语法格式
func Identity[T any](v T) T { // any 允许任意类型作为类型实参
return v
}
comparable
概念
comparable: 允许相等比较的类型约束;- 不包含类型: slice、map、function;
语法格式
func Equal[T comparable](a, b T) bool { // comparable 允许 == 和 !=
return a == b
}
自定义约束
概念
- constraint interface: 可在接口中写类型集合;
- union:
|表示允许多个类型; - 类型集合: 约束允许的所有类型;
语法格式
type Integer interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 // ~T 允许底层类型为 T 的自定义类型
}
func Max[T Integer](a, b T) T {
if a > b { // 只有类型集合中所有类型都支持的操作可用
return a
}
return b
}
类型元素
概念
- 基本接口: 只包含方法的接口, 可作为普通值类型;
- 非基本接口: 包含类型元素的接口, 只能作为约束使用;
类型元素
type Number interface {
~int | ~int64 | ~float64 // 类型元素只能用于约束接口
}