我現在正在學習 Go,我的第一個專案是獲取 GCP 專案串列并確定哪些啟用了 K8s API,然后獲取 K8s 集群的版本。
我已經設法獲得了一個可以過濾的專案串列,盡管我在比較“google.golang.org/genproto/googleapis/api/serviceusage/v1”.State 以檢查是否遇到問題時遇到了問題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",
}
it := c.SearchProjects(ctx, rqst)
for {
resp, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(resp)
ProjectMap[resp.DisplayName] = resp.Name
}
return ProjectMap
}
我想看看resp.State是否等于“ENABLED”,這樣我就可以繼續檢查每個集群中部署的 K8s 的版本。但是,我目前遇到:
無效操作:resp.State == "ENABLED" (不匹配的型別 "google.golang.org/genproto/googleapis/api/serviceusage/v1".State 和無型別字串)
我可以以某種方式將從 API 回傳的內容轉換為字串然后進行比較嗎?否則,我還能怎么檢查?
對此的任何幫助將不勝感激!
uj5u.com熱心網友回復:
State不是字串而是 int32
您可以將其與 int32(例如 2)進行比較,但最好使用定義的常量:
if resp.State == serviceusagepb.state_ENABLED {
...
}
我鼓勵您考慮使用 Visual Studio Code 之類的工具。(Google) 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/google.golang.org/genproto/googleapis/api/serviceusage/v1https://pkg.go.dev/{package}以獲取從生成的檔案API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512024.html
標籤:Google Cloud Collective 去谷歌云平台谷歌API
