在 Go 中编写和测试分页 API 迭代器

主要观点:Go 1.23 将迭代器引入标准库,迭代器可让range操作符在实现特定接口的函数上工作,能懒加载数据,方便处理分页 API。本文展示如何编写自定义迭代器用于消费分页 HTTP API(以 GitHub API 为例)及如何测试。
关键信息

  • 迭代器可实现iter.Seqiter.Seq2func(yield func() bool)签名。
  • 对于远程资源的迭代器,常用第二个值处理错误。
  • 以 GitHub API 为例,实现迭代器来列出用户仓库,需注意初始化和分页逻辑。
  • 测试迭代器时可使用 mock 来模拟RepositoryLister,通过定义预期序列和转换为拉式迭代器来进行测试。
    重要细节
  • 示例代码中通过for value := range myIterator() { }使用迭代器。
  • 编写迭代器函数如IterateRepositoriesByUser,包含初始化和分页循环。
  • 测试时创建repositoryListerMock来模拟ListByUser方法的调用和返回结果。
  • 通过Pull2将迭代器转换为拉式迭代器,以便更精细地控制迭代序列。
  • 测试用例涵盖单页、多页、API 错误和无仓库等情况。
阅读 9
0 条评论