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 關注
- 364 瀏覽
添加回答
舉報