Go 博客
Go 泛型提案
泛型提案
我们已经提交了Go 语言变更提案,以添加对类型和函数类型参数的支持,允许一种泛型编程形式。
为什么泛型?
泛型可以为我们提供强大的构建块,使我们能够更轻松地共享代码和构建程序。泛型编程意味着编写函数和数据结构,其中某些类型留待稍后指定。例如,您可以编写一个对任意数据类型切片进行操作的函数,其中实际数据类型仅在调用函数时指定。或者,您可以定义一个存储任何类型值的结构,其中要存储的实际类型在创建该结构的实例时指定。
自从 Go 于 2009 年首次发布以来,对泛型的支持一直是最常被请求的语言特性之一。您可以阅读更多关于泛型为何有用的内容之前的博文。
尽管泛型有明确的用例,但将它们干净地融入 Go 之类的语言是一项艰巨的任务。第一个(有缺陷的)尝试在 Go 中添加泛型可以追溯到 2010 年。在过去十年中,还有其他几个尝试。
在过去几年中,我们一直在研究一系列设计草案,这些草案最终形成了基于类型参数的设计。这个设计草案得到了 Go 编程社区的大量投入,许多人使用泛型游乐场(如之前的博文中所述)进行了实验。Ian Lance Taylor 在GopherCon 2019 上的演讲中谈到了为什么添加泛型以及我们现在遵循的策略。Robert Griesemer 在GopherCon 2020 上的后续演讲中讨论了设计和实现的变化。语言变更完全向后兼容,因此现有的 Go 程序将继续像现在一样工作。我们已经达到了这样的阶段,我们认为设计草案已经足够好,也足够简单,可以提议将其添加到 Go 中。
现在会发生什么?
该语言变更提案流程是我们对 Go 语言进行更改的方式。我们现在已经启动了这个流程,以便将泛型添加到 Go 的未来版本中。我们邀请提出实质性的批评和意见,但请尽量避免重复先前的意见,并请尝试避免简单的赞成或反对意见。相反,请对您同意或不同意的评论或对提案本身添加赞成/反对表情符号反应。
与所有语言变更提案一样,我们的目标是推动达成共识,要么将泛型添加到语言中,要么让提案失效。我们理解,对于如此重大的变更,不可能让 Go 社区的每个人都满意,但我们的目的是做出一个每个人都愿意接受的决定。
如果提案被接受,我们的目标是在年底之前提供一个完整的(尽管可能尚未完全优化)的实现,供人们尝试,也许会作为 Go 1.18 测试版的一部分。
下一篇文章: Go 中的命令 PATH 安全
上一篇文章: Go 在 ARM 及其他平台上的运行
博客索引