Go1.23 Iterators 迭代器
Go1.23 Iterators 迭代器
建议点击 查看原文 查看最新内容。
原文链接: https://typonotes.com/posts/2025/05/22/go1.23-iterators/
在 Go1.23 新引入了一个标准包 迭代器 Iterator 。 可以返回一个 可迭代对象 - 函数, 该对象 接受一个 回调函数 - yield 。
标准包 iter 中包含以下两个类型 Seq, Seq2。 二者都返回了一个 生成器函数 yield function
|
|
Seq2
的命名方式看起来很奇怪, 感觉不太符合 golang 的命名习惯。 这里推测 2
表示接受的回调有两个参数。 func(yield func(K, V) bool)
1. 标准库的迭代器
截至 go1.24 , 目前已经有 4个 标准包支持返回迭代器了。
slices
,maps
: https://tip.golang.org/doc/go1.23#iteratorsstrings
: https://tip.golang.org/doc/go1.24#stringspkgstringsbytes
: https://tip.golang.org/doc/go1.24#bytespkgbytes
这个没什么好说的, 直接看文档就行了。
2. 迭代器对象的使用
迭代器的两种使用方式 回调函数 与 for 循环。
使用 回调函数 时, 可以通过
return false
提前终止遍历。使用 for 循环时
Seq
返回的对象是 值, 类似于for _, v := range []int{1,2,3}
中的 vSeq2
返回的对象是 键、值。 普通的 for 循环类似。
|
|
3. 第三类生成器函数
在 Go1.23 的 Release Notes 中提到的 无参数迭代对象, 并没有在标准包中找到。
|
|
目前我这边没想到有什么使用场景, 从语法上来看, 配合 柯里化函数 、 通道 等手段, 还是有操作性的。
|
|
4. 扩展阅读
- Range Over Function Types - https://go.dev/blog/range-functions
- 原文链接:https://typonotes.com/posts/2025/05/22/go1.23-iterators/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。
