Go 1.23 新特性速览:range-over-func 终于来了
目录
range-over-func 正式可用
// 不用 channel 也能做 lazy collection
func Range(start, end int) func(yield func(int) bool) {
return func(yield func(int) bool) {
for i := start; i < end; i++ {
if !yield(i) {
return
}
}
}
}
func main() {
for v := range Range(0, 10) {
fmt.Println(v)
}
}iterators 包
import "iter"
func First[T any](seq iter.Seq[T]) (T, bool) {
for v := range seq {
return v, true
}
var zero T
return zero, false
}实际价值
range-over-func 适合:
- 处理大数据集(不用全部加载内存)
- 无限序列
- 管道式数据处理
结论
Go 1.23 没有革命性变化,但 range-over-func 正式化是重要的工程进步。