Go 泛型(Generics)的提议已提交

未匹配的标注

本文为官方 Go Blog 的中文翻译,详见 翻译说明

Ian Lance Taylor
2021 年 1 月 12 日

泛型提案

我们提出了一篇 Go 语言更改提案 ,为类型和函数添加了类型参数支持,以允许一种形式的泛型编程。

为何需要泛型?

泛型提供了强大的能力,使我们能容易地共享代码和开发程序。使用泛型意味着在编写函数和数据结构时,可以将其中某些类型留到之后再确定。例如,您可以编写一个操作任意数据类型的切片的函数,在函数被调用时才确定具体的类型。或者,您可以定义一种存储能任何类型的值的数据结构,直到创建该数据结构的实例时才指定实际要存储的类型。

自2009年 Go 语言首次发布以来,对泛型的支持就一直呼声最高的语言功能之一。您可以在 早期博客文章 中阅读更多关于泛型作用的文章。

虽然泛型有明确的应用场景,但将它干净利落地添加至像 Go 这样的语言中是一项艰巨的任务。 最早在 Go 中添加泛型的尝试(存在缺陷) 可以追溯到2010年。在过去十年中,还有许多其它这样的尝试。

过去的几年中,我们一直围绕着一系列设计草案工作,最终得到了 基于类型参数的设计 。这篇设计草案从 Go 语言社区汲取了非常多的建议,许多人在使用 这篇早期博文 中介绍的 泛型实验室 进行实验。 Ian Lance Taylor 在 GopherCon 2019 上做了一次关于为什么需要添加泛型和我们正采取的策略的 演讲 , Robert Griesemer 在 GopherCon 2020 上也有一次 关于实现和设计上的改变的演讲 作为对前者的补充。草案对语言的改动是完全向后兼容的,所以现存的 Go 程序可以继续正常工作。现在,我们认为这份设计草案已经具有足够高的质量,也足够简单,是时候将它正式纳入 Go 语言之中了。

现在发生了什么

我们通过 语言变更提案流程 来对 Go 语言做出改动。我们已经启动了 这一流程 来将泛型机制添加进未来版本的 Go 中。我们欢迎有价值的意见和建议,但请尽量 避免简单的 +1 或 -1 评论 。作为代替,可以对评论或整份提案点赞或点踩来表明你的看法。

与所有语言变更提案一样,我们的目标对是否通过这一提案以在语言中增加泛型机制达成共识。我们明白这种体量的变更不可能让 Go 语言社区中的所有人满意,但我们希望做出一项所有人都乐意接受的决定。

如果这份提案被通过,我们的下一个目标会是在今年年底之前提供一个完整,但不一定经过充分优化的实现,使所有人都能尝试这一机制。该实现或许会跟随 Go 1.18 betas 版本发布。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/go-blog/the-pro...

译文地址:https://learnku.com/docs/go-blog/the-pro...

上一篇 下一篇
Summer
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~