在 Go 1.23 中对函数的范围(遍历)

主要观点:Go 1.23 新增了遍历函数(即“迭代器”)的主要功能,官方博客有详细介绍,本文是对之前预览该功能文章的重写,反映了最终状态。
关键信息

  • 新增遍历整数功能,如for i := range 5等价于for i := 0; i < 5; i++
  • 为解决自定义容器迭代问题,通过All方法和yield函数实现遍历函数,如AssocList的迭代。
  • 迭代函数机制:函数以特定签名被用于for-range循环,编译器会自动转换,可通过yield函数控制迭代停止等。
  • 示例包括无限迭代器(如生成斐波那契数)、递归迭代器(如二叉树遍历)、bufio.Scanner的迭代封装等。
  • 还提到“push”和“pull”迭代器的概念及区别。
    重要细节
  • AssocList通过All方法和yield函数实现遍历,如for k, v := range al.All()
  • 迭代函数机制中,yield函数参数个数对应for-range循环左侧变量个数,break转换为yield返回false等。
  • 无限迭代器genFib通过递归生成斐波那契数,for循环根据条件控制迭代停止。
  • 递归迭代器Tree通过push方法实现,利用递归控制迭代。
  • bufio.Scanner可通过封装实现for-range迭代,标准库中已添加Backward函数等迭代函数。
  • “push”迭代器推动迭代过程,“pull”迭代器需保留状态,标准库中已添加iter.Pull函数用于转换。
阅读 17
0 条评论