Golang 泛型
前言
Golang在1.18 beta版本正式推出泛型。
泛型新功能
- Type parameters for functions and types
类型参数,可以用于泛型函数以及泛型类型
- Type sets defined by interfaces
Go 1.18之前,interface用来定义方法集( a set of methods)。
Go 1.18开始,还可以使用interface来定义类型集(a set of types),作为类型参数的Type constraint(类型限制)
| 和 ~ |: 表示取并集。比如下例的Number这个interface可以作为类型限制,用于限定类型参数必须是int,int32和int64这3种类型。 ~T表示底层类型是T的所有类型
- Type inference
类型推导,可以帮助我们在写代码的时候不用传递类型实参,由编译器自行推导。
注意:类型推导并不是永远都可行。
在上文后,调用泛型方法,需要
pt[int](1)
当然中括号也可以不写,编译器会进行类型推导
与其他语言泛型相比
c++ : 编译时生成每种类型的方法,缺点编译慢,需要后端消除无用代码 java: 类型擦除,所有类型都转换成Object,取值再做一次拆箱,缺点运行慢
|