之前我在编程范式游记中介绍了OOP中的子类化(subtype,也叫子类型多态subtype polymorphism)和泛型(generics,也叫参数多态parametric polymorphism),关于两者的区别和比较可以参考那篇文章,在其中我吐槽了Go目前对泛型支持的匮乏,随着Go 2提上日程,Go2泛型的设计细节也越来越清晰,我们从最新的Go泛型草案来了解下Go2泛型设计上有哪些考量和取舍。
1. 最简原型
先从最简单的泛型定义开始:
1 | // Define |
语法上和其它语言泛型大同小异,泛型的本质是将类型参数化,Go2中用函数名后的[]
定义类型参数。以上声明对C++开发者来说非常亲切的(只是换了一种语法形式),实际上这在Go2中是错误的泛型函数声明,因为它没有指明类型参数约束(constraints)。