2 回答
TA贡献1784条经验 获得超2个赞
我正在浏览 AWS 的 go SDK 中的 ListObjects 函数的文档。
使用 ListObjectsV2。它的行为或多或少相同,但它是 ListObjects 的更新版本。AWS 更新 API 并不是很常见,而当他们这样做时,通常是有充分理由的。他们非常擅长向后兼容,这就是ListObjects
仍然存在的原因。
此示例使用 ListObjectsPages(在后台调用 ListObjects)并声称列出所有对象。
ListObjectsPages
是 , 的分页等价物ListObjects
,对于V2
我将在下面描述的版本也是如此。
许多 AWS API 响应是分页的。AWS 使用光标分页;这意味着请求响应包括一个游标——ContinuationToken
在 ListObjectsV2 的情况下。如果存在更多对象(IsTruncated
在响应中),则后续ListObjectsV2 请求内容可以提供 ContinuationToken以继续第一个响应停止的列表。
ListObjectsV2Pages
为您处理迭代ListObjectsV2
请求,因此您不必处理ContinuationToken
and的逻辑IsTruncated
。相反,您提供了一个将为响应中的每个“页面”调用的函数。
所以说ListObjectsV2Pages
将列出“所有”对象是准确的,但是因为它在后端进行了多次 ListObjectsV2
调用,所以它会列出超过一页的响应。
因此,...Pages
函数可以被认为是便利函数。您应该始终在适当的时候使用它们——它们消除了分页的痛苦,而分页对于使潜在的大量 api 响应可操作至关重要。在 AWS 中,如果支持分页,则假设您需要它 - 在典型情况下,不保证结果的第一页包含任何结果,即使后续页面包含。
TA贡献1798条经验 获得超3个赞
AWS Go SDK V2为我们提供了分页器类型,以帮助我们管理 S3 的每次查询项目限制。ListObjectsV2Pages离开了。取而代之的是ListObjectsV2Paginator,它处理@Daniel_Farrell 提到的分页细节。
构造函数接受与列表对象查询 ( ) 相同的参数type ListObjectsV2Input。分页器公开了 2 个方法:HasMorePages: bool和NextPage: (*ListObjectsV2Output, error).
var items []Item
for p.HasMorePages() {
batch, err := p.NextPage(ctx)
// etc...
item = append(items, newItems...)
}
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报