跳到主要内容

约束

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 // 类型元素只能用于约束接口
}