基于链接blow on API Operation Pagination without Callback 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发布于 2020-04-08 21:23:08
有点晚了,但我还是把它放在这里,以防我能帮上忙。
示例:
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。
发布于 2019-01-10 14:24:58
这可能是因为您对API的用法有点着迷
每秒最多可以调用ListBackups 5次。
p.Next()循环中p.HasNextPage()的值是什么?
https://stackoverflow.com/questions/54118604
复制相似问题