脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 出泛型后 API 怎么办?Go 开发者要注意了

出泛型后 API 怎么办?Go 开发者要注意了

2021-10-26 22:38脑子进煎鱼了陈煎鱼 Golang

在今天这篇文章中,我们针对 Rob Pike 为什么会要调整 Go 泛型后的标准库 API 等的提议进行了分析。为此我们了解到 Go 核心团队对 ”how to update APIs for generics“ 的顾虑,以及现有社区的激情,综合来看,给出的逐步演进的泛型方案建

出泛型后 API 怎么办?Go 开发者要注意了

大家好,我是煎鱼。

前段时间社区里一下子就爆了,主要是各大媒体引用了 Go 语言之父 Rob Pike 所提的《go: don't change the libraries in 1.18》。

出泛型后 API 怎么办?Go 开发者要注意了

很多社交媒体都做了跟进,认为 Rob Pike 是硬性的反对 Go 泛型API 改造!

如果读者只看了标题,有可能会产生一些误解实际上其表达的意思和近期 Go 社区讨论的事项是有关联的,要一起综合来看。

为此,今天煎鱼就和大家一起来理一理,看看 Go 泛型 API 的改造工程,是个怎么一回事?

现状

马上就是 2021.11 月,连深圳都变冷了...根据 Go 语言的发布周期,Go1.18 版本的发布,那就是 2022.02 月左右。

出泛型后 API 怎么办?Go 开发者要注意了

现在给到 Ian Lance Taylor、 Robert Griesemer 等大佬仅剩 3 个月的时间给大家讨论泛型细节,进一步完善实现,达到生产可用。

抛出 Go 泛型的实现进度不说,现在遇到了一个比较大的问题。那就是实现泛型后 ”如何更新泛型的 API“。

这之中包含好几个方面,分别是:既有标准库、开源库,新标准库等。不同库之间是不同的人在维护。

但这里存在一个大问题,如下图:

出泛型后 API 怎么办?Go 开发者要注意了

Russ Cox 在 9 月就提出了 ”how to update APIs for generics“ 的疑惑,当时显然这一块还没有共识。在 11 月的现在,从讨论的记录来看,怎么做还没有达成一个最终的明确共识(初步已有,未正式答复)。

但存在一个问题,Go 社区对于泛型的迫切度,热情非常高,各种泛型化的标准库的提案都提出来了,推着设计者往前走。

争议

结合来看 Rob Pike,更多是:建议和提醒 Go 社区和核心开发团队,要 ”悠着点“,Go1.18 想支持泛型,做完成库的改造,还得代价小,毕竟细节很多。

引用其理由,核心论据是:

在一个版本中,做泛型、标准库等,要做的事情太多,很可能会弄错。

  • 没有在 Go 中使用新类型的经验,无法为其设计提供有力的依据。
  • Go1 兼容性的承诺,在任何细节上出错的代价都很高,要等待、观察和学习。
  • 和一句谚语很接近:”不要一口气吃胖子“,何况没有相关的经验,都只是详细的推理、预演,需要晋升。

在 Go issues 中也有人吐槽,1.18 空有泛型的实现。其他配套的标准库等都没有,那这个 Go1.18 出来的泛型意义是?

后续

虽然还没有最终拍板,但是根据讨论的过程和社区赞同数(??)来看,如下:

出泛型后 API 怎么办?Go 开发者要注意了

后续仍然会设计、构建、测试和使用用于切片(Slice)、地图(Map)、通道(Channel)等的新库。

这些库并没有生产可用,会把他们放在 golang/x/exp 仓库中,可以使用,仅作为现阶段的实验性的库,没有兼容性保障。

出泛型后 API 怎么办?Go 开发者要注意了

该实验库会在一两个周期内会改变、调整和发展。能够让 Go 社区的开发者们尝试一下使用,以便接受更多的意见。

再根据使用者的反馈通过经验和分析进行更新,就会把它们移到主仓库中,才达到正式生产可用的级别。

总结

在今天这篇文章中,我们针对 Rob Pike 为什么会要调整 Go 泛型后的标准库 API 等的提议进行了分析。

为此我们了解到 Go 核心团队对 ”how to update APIs for generics“ 的顾虑,以及现有社区的激情,综合来看,给出的逐步演进的泛型方案建议。

以此可知,Go 完整泛型(含配套库)的生产可用,可能还要经历几个 Go 版本,让不少人望穿秋水了...

原文链接:https://mp.weixin.qq.com/s/yWEM2EAwv80ZUFjbKGtpNA

延伸 · 阅读

精彩推荐
  • Golanggolang的httpserver优雅重启方法详解

    golang的httpserver优雅重启方法详解

    这篇文章主要给大家介绍了关于golang的httpserver优雅重启的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    helight2992020-05-14
  • Golanggo日志系统logrus显示文件和行号的操作

    go日志系统logrus显示文件和行号的操作

    这篇文章主要介绍了go日志系统logrus显示文件和行号的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang中Bit数组的实现方式

    Golang中Bit数组的实现方式

    这篇文章主要介绍了Golang中Bit数组的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    天易独尊11682021-06-09
  • Golanggolang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脉之数据类型详情

    Golang通脉之数据类型详情

    这篇文章主要介绍了Golang通脉之数据类型,在编程语言中标识符就是定义的具有某种意义的词,比如变量名、常量名、函数名等等,Go语言中标识符允许由...

    4272021-11-24
  • Golanggolang 通过ssh代理连接mysql的操作

    golang 通过ssh代理连接mysql的操作

    这篇文章主要介绍了golang 通过ssh代理连接mysql的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    a165861639710342021-03-08
  • Golanggolang如何使用struct的tag属性的详细介绍

    golang如何使用struct的tag属性的详细介绍

    这篇文章主要介绍了golang如何使用struct的tag属性的详细介绍,从例子说起,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看...

    Go语言中文网11352020-05-21
  • Golanggo语言制作端口扫描器

    go语言制作端口扫描器

    本文给大家分享的是使用go语言编写的TCP端口扫描器,可以选择IP范围,扫描的端口,以及多线程,有需要的小伙伴可以参考下。 ...

    脚本之家3642020-04-25