Go 1.28 提案:引入泛型集合类型
Golang proposal: container/: generic collection types
Go Collections 工作组正式提出为 Go 1.28 标准库引入泛型集合类型的提案。此次更新旨在解决长期以来标准库中集合类型匮乏的问题,将提供包括 hash.Map、hash.Set、set.Set 以及 ordered.Map 在内的多种数据结构。提案特别强调了利用 Go 1.18 引入的 generics 和 Go 1.23 的 iterators 特性,让库定义的集合类型也能拥有与内置 slice 和 map 相当的易用性。此外,还计划推出通用的 hash/maphash.Hasher 接口以支持自定义哈希函数,并引入抽象约束接口来统一不同集合类型的操作规范。这一系列改动将极大提升 Go 语言在处理复杂数据逻辑时的表达能力和开发效率。
Go 目前在其库中提供的集合类型很少,从一开始我们就强调了语言内置 slice 和 map 类型的灵活性。
HN 评论区
175- DarkNova6
Go 正在一步步吸取过去 20 年里其他语言都吃过的苦头。尽管他们费尽心思,但提出的方案看起来却和其他人如出一辙,这种对现状的意外确认反而让人耳目一新。
- vander_elst
真让人难过,人们白白浪费了数百万小时和无数行代码,反复重写那些本该一开始就内置在语言里的基础结构。我们还要等多少年才能终于等到和类型(sum types)?
- nasretdinov
好吧,迟做总比不做强。像集合或类型化堆这样的东西早就该有了。也许他们甚至会在本十年内为 database/sql 的结果添加迭代器 API(有点像我为 sqlx 提交的这个 pull request https://github.com/jmoiron/sqlx/pull/990,但可能更完善一些)。
- dgunay
他们这么做挺酷的,但有了迭代器,加上即将在 1.27 推出的泛型方法参数,你其实已经可以毫不费力地自己实现其中大部分功能了。我在工作中几乎为所有需要的场景都实现了迭代器,还有处理额外映射、过滤等操作的小型库,而且借助 AI 代理回过头去重构旧代码以使用它们,现在比以往任何时候都更容易。
- kamma4434
欢迎来到 Java 的世界,自 1998 年以来,集合(Collections)就是每位程序员的家常便饭。
趁此机会,我恭敬地建议也加上可组合的流(composable streams),那是我们在 2014 年就有的功能,能让操作集合变得愉快得多。
(玩笑归玩笑,在 Java 里真的很棒,你可以从一个通用的 ArrayList 开始,只需改一个关键字就能把它变成链表,而无需修改任何代码;或者用一行代码将任何集合变成同步或只读的副本。集合功能很棒,我在 Golang 里很怀念它们。)
- jiehong
好吧,终于来了!
我希望他们不要把可变方法混在里面,不过算了。
- athorax
一方面我很高兴看到这些功能被加入,但很明显,像现在这样把泛型硬塞进语言里并不是个好主意。希望 Go v2 能在更基础的层面上解决这个问题,同时仍能保持与现有 Go 代码的互操作性或轻松迁移。
- valcron1000
晚了 22 年,但迟做总比不做强。