我目前正在學習 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以獲取從生成的文檔應用程序接口。
- 1 回答
- 0 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消