因此,我正在从管理 API 成功读取分页的用户列表。我可以看到
NextPageToken
以及结果的第一页。但返回的 UsersListCall 对象中似乎没有任何内容可供我迭代?没有地方可以指定下一页标记,就像我们对 HTTP 样式调用所做的那样。有人可以提示我从哪里开始迭代这些页面吗?
adminService, err := admin.NewService(ctx,
option.WithCredentials(credentials),
)
[...]
users, err := adminService.Users.List().Customer("my_customer").Do()
if err != nil {
if e, ok := err.(*googleapi.Error); ok {
fmt.Printf("Error code: %v\n", e.Code)
fmt.Printf("Message: %v\n", e.Message)
} else {
fmt.Printf("Error: %v\n", err)
}
os.Exit(1)
}
fmt.Printf("token: %s\n", users.NextPageToken)
for _, user := range users.Users {
fmt.Printf("User: %s (%s)\n", user.Name.FullName, user.PrimaryEmail)
}
“技巧”是创建一个初始请求,然后用它来寻呼响应的
NextPageToken
,直到没有更多的令牌。
尝试:
package main
import (
"context"
"fmt"
"os"
admin "google.golang.org/api/admin/directory/v1"
"google.golang.org/api/googleapi"
)
func main() {
ctx := context.Background()
adminService, err := admin.NewService(ctx)
if err != nil {
panic(err)
}
rqst := adminService.Users.List().Customer("my_customer")
for {
resp, err := rqst.Do()
if err != nil {
if e, ok := err.(*googleapi.Error); ok {
fmt.Printf("Error code: %v\n", e.Code)
fmt.Printf("Message: %v\n", e.Message)
} else {
fmt.Printf("Error: %v\n", err)
}
os.Exit(1)
}
for _, user := range resp.Users {
fmt.Printf("User: %s (%s)\n", user.Name.FullName, user.PrimaryEmail)
}
if resp.NextPageToken == "" {
break
}
rqst.PageToken(resp.NextPageToken)
}
}