主要观点:Go 1.23 将迭代器引入标准库,迭代器可让range
操作符在实现特定接口的函数上工作,能懒加载数据,方便处理分页 API。本文展示如何编写自定义迭代器用于消费分页 HTTP API(以 GitHub API 为例)及如何测试。
关键信息:
- 迭代器可实现
iter.Seq
、iter.Seq2
或func(yield func() bool)
签名。 - 对于远程资源的迭代器,常用第二个值处理错误。
- 以 GitHub API 为例,实现迭代器来列出用户仓库,需注意初始化和分页逻辑。
- 测试迭代器时可使用 mock 来模拟
RepositoryLister
,通过定义预期序列和转换为拉式迭代器来进行测试。
重要细节: - 示例代码中通过
for value := range myIterator() { }
使用迭代器。 - 编写迭代器函数如
IterateRepositoriesByUser
,包含初始化和分页循环。 - 测试时创建
repositoryListerMock
来模拟ListByUser
方法的调用和返回结果。 - 通过
Pull2
将迭代器转换为拉式迭代器,以便更精细地控制迭代序列。 - 测试用例涵盖单页、多页、API 错误和无仓库等情况。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。