我正在瀏覽AWS 開發工具包中的函式檔案。ListObjectsgo
(實際API 端點或多或少也是如此)
所以檔案寫道:
回傳存盤桶中的部分或全部(最多 1,000 個)物件。
這是什么意思?如果我的存盤桶有 200.000 個物件,此 API 呼叫將不起作用?
此示例使用ListObjectsPages(ListObjects在幕后呼叫)并聲稱列出所有物件。
這里的實際情況是什么?
uj5u.com熱心網友回復:
我正在瀏覽 AWS 的 go SDK 中 ListObjects 函式的檔案。
使用 ListObjectsV2。它的行為或多或少相同,但它是 ListObjects 的更新版本。AWS 更新 API 并不常見,而且當他們這樣做時,通常是有充分理由的。他們非常注重向后兼容性,這就是為什么ListObjects仍然存在的原因。
此示例使用 ListObjectsPages(在幕后呼叫 ListObjects)并聲稱列出所有物件。
ListObjectsPages是分頁的等價物ListObjects,對于V2我將在下面描述的版本也是如此。
許多 AWS API 回應是分頁的。AWS 使用游標分頁;這意味著請求回應包括一個游標 -ContinuationToken在 ListObjectsV2 的情況下。如果存在更多物件(IsTruncated在回應中),后續的ListObjectsV2 請求內容可以提供 ContinuationToken以在第一個回應停止的地方繼續串列。
ListObjectsV2PagesListObjectsV2為您處理迭代請求,因此您不必處理ContinuationTokenand的邏輯IsTruncated。相反,您提供一個函式,該函式將為回應中的每個“頁面”呼叫。
因此,準確地說ListObjectsV2Pages將列出“所有”物件,但這是因為它在后端進行了多次 ListObjectsV2呼叫,因此它會列出不止一頁的回應。
因此,...Pages函式可以被認為是便利函式。您應該始終在適當的時候使用它們 - 它們消除了分頁的痛苦,并且分頁對于使潛在的大量 api 回應可操作至關重要。在 AWS 中,如果支持分頁,假設您需要它 - 在典型情況下,結果的第一頁不保證包含任何結果,即使后續頁面包含。
uj5u.com熱心網友回復:
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...)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385979.html
標籤:亚马逊网络服务 去 亚马逊-s3 aws-sdk-go
上一篇:將Gobeta版本與GitHubActions結合使用
下一篇:TestMain用于所有測驗?
