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 Beta 版的一部分。
下一篇文章:Go 中的命令 PATH 安全性
上一篇文章:Go 在 ARM 及其他平台上的应用
博客索引