亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號