简单上手go 泛型
func Min( x , y int ) int {
if x < y {
return x
}
return y
}
这是一个比较int类型x,y大小的方法
这个比较int的方法很完美, 但是如果有一天,需求增加了,我们需要比较不是两个int类型的变量而是要比较两个float64
类型变量的方法呢,在go
没有引入泛型时,该如何去完成这个需求呢
方案:定义新函数
// 定义float64类型函数
func MinFloat64(x , y float64) float64 {
if x < y {
return x
}
return y
}
//调用
func main() {
var x , y float64
x = 2.3
y = 2.5
MinFloat(x , y )
}
- 优点:代码入侵性低
- 缺点:将来如果出现新需求
int32
uint32
,需要定义MinInt32
,MinUint32
一大堆函数
这时候用go
的新特性泛型
简单解决
func MinF[F int64 | float64 | float32](x , y F) F {
if x < y {
return x
}
return y
}
F 就是我们定义的一个类型形参,他允许int64 | float64 | float32
这个三个类型,这个F不是固定字母,随便定义,如果你愿意你可以把他命名为 A
, B
, C
…
//调用
func main() {
var a , b int64
var x , y float32
a = 1
b = 2
MinF(1 , 2)
x = 2.3
y = 2.4
MinF(x , y)
}
这样如果以后新增类型只需要在类型形参F后面加 | 类型
就可以完美解决了
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
学到了