目录

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 正式化是重要的工程进步。