Go 团队近日在博客介绍了 Go 泛型的最新进展。

Go 团队表示他们一直在完善泛型的设计草案,并为此编写了一个类型检查器——可按照设计草案中的说明,解析使用泛型的 Go 代码并报告任何类型的错误。为了收集社区的反馈,他们还编写了示例代码并在草案中提供。

根据收集的反馈和了解的信息,Go 团队发布了更新后的泛型设计草案。

"The design is fully backward compatible with Go 1",完全兼容 Go 1

新版草案最大的变化是放弃了关于 contracts 的想法。因为团队认为 contracts 和 interface 类型之间的区别会令人感到困扰,所以他们正在消除这种区别。类型参数现在受 interface 类型约束,当 interface 类型仅作为约束(constraints)使用时,可被允许包含类型列表。在旧版的设计草案中,类型列表属于 contracts 的功能。更复杂的情况将使用参数化的 interface 类型.

为了帮助决定如何进一步完善设计草案,团队还发布了翻译工具。此工具可用于类型检查,以及运行使用设计草案中描述的泛型版本编写的代码。它通过将泛型代码翻译为普通的 Go 代码来工作。此翻译过程有一定的局限性,不过团队主要是希望借此让大家对 Go 泛型的整体有所了解。如果泛型最终被吸纳,它们的实际实现可能会有所不同。

此工具已在 Go playground 的变体上提供,这个 playground 的工作方式与常见的 Go playground 相同,不过前者支持泛型代码。团队希望此工具能为 Go 用户提供尝试使用泛型的机会,并了解两件主要的事。

首先,Go 泛型是否有意义,能给用户带去怎样的惊喜,错误提示消息是否有价值;其次,很多人曾说过需要 Go 泛型,但他们不一定确切知道这意味着什么,那么泛型的设计草案是否以有用的方式解决了此问题。另外,假如有一个问题让人认为“如果 Go 具有泛型,我就可以解决此问题”,那么使用此工具是否可以解决问题?

至于具体的推进计划,Go 团队表示要根据从社区收集的反馈而定。如果设计草案受到好评,并且不需要进行重大更改,那么下一步将是正式的语言变更提案。

为了保证符合预期,如果每个人都对设计草案完全满意,并且不需要进行任何进一步的调整,则最早可以在计划于2021年8月发布的 Go 1.17 中添加泛型。不过可能存在无法预料的问题,所以这是一个乐观的时间表,团队也无法做出任何明确的预测。

详情查看 https://blog.golang.org/generics-next-step

©著作权归作者所有:来自51CTO博客作者mob604756fb8908的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Python类型转换
  2. MP4:文件类型mp42转码方案
  3. <JVM中篇:字节码与类的加载篇>02-字节码指令集
  4. jdbc 读写 blob 类型的数据
  5. Pandas Series对象有哪些属性?六大类!
  6. 面向前端开发者的V8性能优化
  7. 孙卫琴的《精通JPA与Hibernate》的读书笔记:映射Bag包(值类型的集
  8. 变量的类型转换方式 变量值传递与值引用的区别 变量的作用域 p
  9. 【小白笔记】Elastic Search使用Rest风格请求的CRUD

随机推荐

  1. SpringBoot 应用程序启动过程探秘
  2. 网关 Spring-Cloud-Gateway 源码解析 —
  3. 分布式事务 TCC-Transaction 源码解析 —
  4. Springboot应用缓存实践之:Ehcache加持
  5. 注册中心 Eureka 源码解析 —— 应用实例
  6. 注册中心 Eureka 源码解析 —— 注册表 I
  7. Android(安卓)官方架构组件 ViewModel :
  8. 数据库中间件 MyCAT 源码分析 —— 调试
  9. Python PK C++,初学者该如何挑选?
  10. REPMGR高可用+VIP方案