Go语言中的泛型(一:初始泛型)

go   2023-04-27 21:26   687   0  

        Go 是同java等一样是一门强类型语言,意味着程序中的每个变量和值都有特定的类型,例如int、string 等。在函数签名中,我们需要对参数和返回值指定类型。例如

func sum(a, b int) int {
    return a+b
}

func sumFloat(c, d float64) float64 {
    return a+b
}

func mergeStr(e, f string) string {
    return a+b
}

        从上面的例子可以看出,sum和sumFloat的函数方法体内容完全一致,只是受限于参数类型以及返回值类型,传统方式变得不得不多写一堆看似重复的代码,很不方便,也非常繁琐。业务逻辑简单的情况下可能还好,如果业务逻辑变得复杂了,需要同时维护多个`版本`的方法。增加了维护成本以及出错的概率。这时候泛型就应用而生。

        Go则在1.18正式启用了泛型。简单来说(便于理解,可能不是非常准确),在定义函数时候,不便于区分他的参数类型或者返回值类型,用一个特定占位符类型表示

func sum[T int | float64](a, b T) T {
   return a + b
}

        方法sum定义了2个a,b 参数,类型为T,而 sum[T int | float64] 限定了 T的类型为int 或者float64,当然T的类型也可以为 任意类型any,由于不是所有的数据类型都支持sum加减法操作,故这里暂时限定了T的类型为int或者float64,避免了编写多个类型的函数。 

        这就是最简单的泛型。

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。