基于API Operation Pagination without Callbacks链接中给出的例子 https://aws.amazon.com/blogs/developer/context-pattern-added-to-the-aws-sdk-for-go/ 我正在尝试列出 dynamodb 中的所有备份。但似乎分页不起作用,它只是检索第一页而不是进入下一页
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
)
func main() {
sess, sessErr := session.NewSession()
if sessErr != nil {
fmt.Println(sessErr)
fmt.Println("Cound not initilize session..returning..")
return
}
// Create DynamoDB client
dynamodbSvc := dynamodb.New(sess)
params := dynamodb.ListBackupsInput{}
ctx := context.Background()
p := request.Pagination{
NewRequest: func() (*request.Request, error) {
req, _ := dynamodbSvc.ListBackupsRequest(¶ms)
req.SetContext(ctx)
return req, nil
},
}
for p.Next() {
page := p.Page().(*dynamodb.ListBackupsOutput)
fmt.Println("Received", len(page.BackupSummaries), "objects in page")
for _, obj := range page.BackupSummaries {
fmt.Println(aws.StringValue(obj.BackupName))
}
}
//return p.Err()
} //end of main
最佳答案
有点晚了,但我会把它放在这里以防我能帮助到别人。
例子:
var exclusiveStartARN *string
var backups []*dynamodb.BackupSummary
for {
backup, err := svc.ListBackups(&dynamodb.ListBackupsInput{
ExclusiveStartBackupArn:exclusiveStartARN,
})
if err != nil {
fmt.Println(err)
os.Exit(1)
}
backups = append(backups, backup.BackupSummaries...)
if backup.LastEvaluatedBackupArn != nil {
exclusiveStartARN = backup.LastEvaluatedBackupArn
//max 5 times a second so we dont hit the limit
time.Sleep(200 * time.Millisecond)
continue
}
break
}
fmt.Println(len(backups))
解释:
完成分页的方式是通过 ListBackupsRequest 中的 ExclusiveStartBackupArn
。如果有更多页面,ListBackupsResponse 返回 LastEvaluatedBackupArn,如果是最后/唯一的页面,则返回 nil。
关于amazon-web-services - DynamoDB 使用 AWS GoLang SDK 列出所有备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118604/