我目前正在学习 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 关注
- 102 浏览
添加回答
举报
0/150
提交
取消