go的泛型目前只对函数支持较好,具体语法如下,T后面的是约束,go的泛型必须有约束,[T any]
,[T int | int32 ...]
,或者这样
go// 定义一个可以比较的接口
type Comparable interface {
~int | ~int16 | ~int32 | ~int64 | ~float32 | ~float64
}
这是一般约束使用
gofunc Add[T int | int32 | int64 | float32 | float64](a, b T) T {
return a + b
}
我们可以用上面定义的约束
gofunc Add[T Comparable](a, b T) T {
return a + b
}
一样的效果。使用的时候需要实例化
goAdd[int32](a,b)
Add[float32](a,b)
# 简单的数值类型go编译器能推导,如下使用也正确
Add(18,98)
Add(3.24,2.324)
我们还可以定义泛型切片
gotype SliceOf[T Comparable] []T
SliString := SliceOf[string]{"xxx", "yyy", "bbb"}
SliInt := SliceOf[int]{520, 888, 999, 666}
for v, k := range SliString {
fmt.Println(v, k)
}
for v, k := range SliInt {
fmt.Println(v, k)
}
以上就是go泛型相关的讲解,能简化一些方法的使用,但是不完善
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!