如何迭代 Google Admin SDK UsersService.List 返回的分页列表?

问题描述 投票:0回答:1

因此,我正在从管理 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)
    }
go google-admin-sdk
1个回答
0
投票

“技巧”是创建一个初始请求,然后用它来寻呼响应的

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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.