共计 739 个字符,预计需要花费 2 分钟才能阅读完成。
来自于 Go 语言第一课
泛型的定义:
泛型编程的中心思想是对具体的、高效的算法进行形象,以取得通用的算法,而后这些算法能够与不同的数据表示法联合起来,产生各种各样有用的软件”。说白了就是将算法与类型解耦,实现算法更宽泛的复用。
泛型解决的问题:
- 数学计算:写出通用的办法来操作 int、float 类型;
- 汇合类型:例如用泛型来写堆、栈、队列等。尽管大部分相似的需要能够通过 slice 和 channel 来解决,然而始终有一些状况难以避免要设计非凡的汇合类型,如有序 Set 和优先级队列;
- slice 和 map 的辅助办法:典型的如 map-reduce API;
泛型定义
咱们晓得,一般函数的参数列表是这样的:func Foo(x, y aType, z anotherType)
这里,x, y, z 是形参(parameter)的名字,也就是变量,而 aType,anotherType 是形参的类型,也就是类型。
咱们再来看一下泛型函数的类型参数(type parameter)列表:
func GenericFoo[P aConstraint, Q anotherConstraint](x,y P, z Q)
这里,P,Q 是类型形参的名字,也就是类型,aConstraint,anotherConstraint 代表类型参数的束缚(constraint),咱们能够了解为对类型参数可选值的一种限定。
但在泛型函数申明时,咱们并不知道 P、Q 两个类型参数具体代表的到底是什么类型,因而函数参数列表中的 P、Q 更像是未知类型的占位符。
束缚(constraint)
束缚(constraint)规定了一个类型实参(type argument)必须满足的条件要求。如果某个类型满足了某个束缚规定的所有条件要求,那么它就是这个束缚润饰的类型形参的一个非法的类型实参。
正文完