本文介绍: 泛型可以让更通用,无需给参数或返回值显示指定特定类型,如,写函数或结构体时,无需具体指定值的类型。具体值类型之后传入,从而避免大量冗余模板代码。泛型的目标就是消除模板代码。举例:反转数组函数无需知道数组元素类型,但如果不采用泛型则不能保障类型安全,或给每个具体类型重试实现同样逻辑,增加维护成本。
泛型概述
泛型可以让更通用,无需给参数或返回值显示指定特定类型,如,写函数或结构体时,无需具体指定值的类型。具体值类型之后传入,从而避免大量冗余模板代码。
泛型的目标就是消除模板代码。举例:反转数组函数无需知道数组元素类型,但如果不采用泛型则不能保障类型安全,或给每个具体类型重试实现同样逻辑,增加维护成本。
泛型语法
Go1.18.0 引入新的语法支持类型元数据并定义类型约束。举例:
函数名后[]
用于指定类型参数, 可以包括一组类型标识以及约束类型。这里T是类型参数,可用于函数参数和返回值类型。any是interface的别名,其定义为:type any = interface{}
。
定义好泛型函数后,调用时直接传入具体类型。我们也可以实例化泛型函数,然后再调用:
前面的调用方式,Golang编译器自动推断泛型类型,所以下面两种方式结果一致:
类型参数
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。