Go:比较 "google.golang.org/genproto/googleapis/api

我目前正在学习 Go,我的第一个项目是获取 GCP 项目列表并确定哪些项目启用了 K8s API,然后获取 K8s 集群的版本。


我已经设法获得了一个项目列表,我可以通过它进行过滤,尽管我在比较“google.golang.org/genproto/googleapis/api/serviceusage/v1”时遇到了问题。状态检查是否K8s API 已启用。


到目前为止我有:



package main


import (

    "fmt"

    "log"

    "context"

    "reflect"


    resourcemanager "cloud.google.com/go/resourcemanager/apiv3"

    resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v3"

    serviceusage "cloud.google.com/go/serviceusage/apiv1"

    serviceusagepb "google.golang.org/genproto/googleapis/api/serviceusage/v1"

    "google.golang.org/api/iterator"

)


func main() {

    

    ProjectMap := getGCPProjects()

    if len(ProjectMap) > 0 {

        fmt.Println(ProjectMap)

        for key, value := range ProjectMap {

            fmt.Println("Checking K8s API for " + key)


            ctx := context.Background()

            c, err := serviceusage.NewClient(ctx)

            if err != nil{

                log.Fatal(err)

            }

            defer c.Close()


            req := &serviceusagepb.GetServiceRequest{

                 Name: value + "/services/container.googleapis.com",

            }


            resp, err := c.GetService(ctx, req)

            if err != nil{

                log.Fatal(err)

            }


            fmt.Println(reflect.TypeOf(resp.State))

            fmt.Println(resp.State)

            if resp.State == "ENABLED"{

                fmt.Println(resp.State)

            }


        }

    } else {

        log.Fatal("ProjectMap is null.")

    }



}


func getGCPProjects() map[string]string{

    

    ProjectMap := make(map[string]string)


    ctx := context.Background()

    c, err := resourcemanager.NewProjectsClient(ctx)

    if err != nil{

        log.Fatal(err)

    }

    defer c.Close()


    rqst := &resourcemanagerpb.SearchProjectsRequest{

        Query: "state:ACTIVE",

    }


我想看看resp.State是否等于“ENABLED”,这样我就可以继续检查每个集群中部署的 K8s 版本。但是,我目前遇到:


无效操作:resp.State == "ENABLED"(不匹配的类型“google.golang.org/genproto/googleapis/api/serviceusage/v1”。状态和无类型字符串)


我能否以某种方式将从 API 返回的内容转换为字符串,然后与之进行比较?否则,我还能怎么检查?

慕少森
浏览 103回答 1
1回答

宝慕林4294392

State不是字符串而是 int32您可以将它与 int32(例如 2)进行比较,但更好的做法是使用定义的常量:if resp.State == serviceusagepb.state_ENABLED {   ... }我鼓励您考虑使用像 Visual Studio Code 这样的工具。(Google) Go 团队为 Go 提供了一个扩展,它应该会显着改善您开发代码的体验。在这种情况下,如果您使用的是 Visual Studio Code 和 Go 扩展,编辑器会突出显示代码:resp.State == "ENABLED"并告知你:invalid operation: cannot compare resp.State == "ENABLED" mismatched types "google.golang.org/genproto/googleapis/api/serviceusage/v1".State and untyped string如果您输入if resp.State == serviceusagepb.,编辑器会提示您列出可能的值。Go 的在线文档 ( pkg.go.dev) 也很出色。对于您正在使用的包,您可以在它们中的任何一个前面加上https://pkg.go.dev/{package}例如https://pkg.go.dev/google.golang.org/genproto/googleapis/api/serviceusage/v1以获取从生成的文档应用程序接口。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go