9月更新了golang设计草稿中的泛型语法
这里可以在线编译
如下
func Print[T any](s []T) {
for _, v := range s {
fmt.Print(v)
}
}
这是一个泛型的Print函数 循环打印泛型切片中的元素
any
any是一种特殊的interface 在我的理解中 any可以看做包含基本类型在内的所有类型
除any外可以声明任意一个包括多种基本类型的interface 如
type Ordered interface{
type int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64, uintptr,
float32, float64,
string
}
有了Ordered可以实现一个比较函数:
func Gte[T Ordered](s1,s2 T) bool{
return s1>=s2
}
当Gte的参数在Ordered的类型列表中时编译可以通过
当Ordered的类型列表中的类型不支持>=运算符时 编译失败
一个map函数的例子
对切片s中的每一个元素执行f 返回一个结果集
func Map[T1, T2 any](s []T1, f func(T1) T2) []T2 {
r := make([]T2, len(s))
for i, v := range s {
r[i] = f(v)
}
return r
}
s := []int{1, 2, 3}
floats := Map[int, float64](s, func(i int) float64 { return float64(i) })
// 依靠泛型推导 可以简化为
floats := Map(s, func(i int) float64 { return float64(i) })