resourcemanager.NewProjectsClient().ListProjects() 的迭代器在 GCP 中无法按预期工作

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

用于存储的

google.golang.org/api/iterator
似乎按预期工作 — 我能够循环超过 6K 的存储桶对象。然而,当在项目上使用
google.golang.org/api/iterator
时,我在
iterator.Done
之前只得到了3个项目。我预计>10K。

我已阅读这些供参考:
https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcemanager/latest/apiv3#cloud_google_com_go_resourcemanager_apiv3_ProjectsClient_ListProjects
https://github.com/googleapis/google-cloud-go/wiki/Iterator-Guidelines
https://pkg.go.dev/google.golang.org/api/iterator
https://pkg.go.dev/cloud.google.com/go/resourcemanager/apiv3
https://pkg.go.dev/cloud.google.com/go/resourcemanager/apiv3/resourcemanagerpb
https://github.com/googleapis/google-cloud-go/blob/main/resourcemanager/apiv3/projects_client_example_test.go

我的问题:

  • 我做错了什么?
  • 迭代器的工作方式应该与存储 API 相同吗? (我想是这样)
  • 我必须将寻呼机与迭代器结合使用吗? (我试过这个)
  • 我必须多次致电
    ListProjects()
    吗?我看到
    PageToken
    类型中有
    ListProjectsRequest
    字段。 (我也试过这个)

测试代码:

package main

import (
    "context"
    "fmt"
    "log"

    resourcemanager "cloud.google.com/go/resourcemanager/apiv3"
    resourcemanagerpb "cloud.google.com/go/resourcemanager/apiv3/resourcemanagerpb"
    "google.golang.org/api/iterator"
)

func printFields(p *resourcemanagerpb.Project) {
    fmt.Printf("Name\t%s\n", p.Name)
    fmt.Printf("ProjectId\t%s\n", p.ProjectId)
    fmt.Printf("DisplayName\t%s\n\n", p.DisplayName)
}

func main() {
    ctx := context.Background()
    c, err := resourcemanager.NewProjectsClient(ctx)
    if err != nil {
        log.Fatalf("NewProjectsClient() error: %v", err)
    }
    defer c.Close()
    req := &resourcemanagerpb.ListProjectsRequest{
        Parent: "organizations/12345678912", // CHANGE-ME
    }
    it := c.ListProjects(ctx, req)
    for {
        project, err := it.Next()
        if err == iterator.Done {
            break
        }
        if err != nil {
            log.Fatalf("Next() error: %v", err)
        }
        printFields(project)
    }
}
go google-cloud-platform iterator
1个回答
0
投票

问题在于

ListProjectsRequest

type ListProjectsRequest struct {
        // Required. The name of the parent resource whose projects are being listed.
        // Only children of this parent resource are listed; descendants are not
        // listed.
        //

...感谢 Manjuram Perumalla 指出了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.