为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕少森 2023-02-21 19:09:32
我目前正在学习 Go,我的第一个项目是获取 GCP 项目列表并确定哪些项目启用了 K8s API,然后获取 K8s 集群的版本。我已经设法获得了一个项目列表,我可以通过它进行过滤,尽管我在比较“google.golang.org/genproto/googleapis/api/serviceusage/v1”时遇到了问题。状态检查是否K8s API 已启用。到目前为止我有:package mainimport (    "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 返回的内容转换为字符串,然后与之进行比较?否则,我还能怎么检查?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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以获取从生成的文档应用程序接口。


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信