简单上手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 协议》,转载必须注明作者和本文链接
本帖由系统于 1年前 自动加精
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!