尝试列出 GCP 组织内的文件夹时出错

我正在尝试在 GO 中编写一个简单的代码,该代码使用resourcemanager API列出 GCP 中组织下的所有文件夹。下面是我的代码:

package main


import (

   "context"

   "log"


   resourcemanager "cloud.google.com/go/resourcemanager/apiv2"

   "google.golang.org/api/iterator"

   resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v2"

)


func main() {

   ctx := context.Background()

   c, err := resourcemanager.NewFoldersClient(ctx)

   if err != nil {

       // TODO: Handle error.

       log.Println("Error: Failed to start client.")

   }

   defer c.Close()


   req := &resourcemanagerpb.ListFoldersRequest{

       Parent: "organizations/<MY-ORG-NAME>",

   }


   it := c.ListFolders(ctx, req)


   tries := 0


   for {

       resp, err := it.Next()

       if err == iterator.Done || tries == 3 {

           break

       }

       if err != nil {

          log.Println(err)

       }

       // TODO: Use resp.

       log.Println(resp)

       tries++

   }

}


代码直接从 API 文档复制,我只是添加了我的组织名称,添加了一些日志功能并限制了 for 循环中的尝试,因为它无休止地打印错误。


每当我运行代码时,我都会收到以下错误消息:


2021/11/04 17:06:41 rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/html; charset=UTF-8"


我不确定这是否是解决方案,但是;我想我需要.proto在我的目录中添加一个文件才能让它工作,但我不明白如何做到这一点或究竟要放什么。我是 GO 新手,这是我第一次使用 API,所以这一切对我来说似乎很混乱。


很感谢任何形式的帮助!


呼如林
浏览 122回答 1
1回答

胡说叔叔

迁移到 API v3 解决了这个问题。这完美!感谢所有发表评论的人以及找到解决方案的同事!package mainimport (&nbsp; &nbsp; "context"&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "log"&nbsp; &nbsp; cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v3")func main() {&nbsp; &nbsp; ctx := context.Background()&nbsp; &nbsp; svc, err := cloudresourcemanager.NewService(ctx)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; foldersService := cloudresourcemanager.NewFoldersService(svc)&nbsp; &nbsp; foldersListCall := foldersService.List()&nbsp; &nbsp; foldersListCall.Parent("organizations/<MY-ORG-ID>")&nbsp; &nbsp; resp, err := foldersListCall.Do()&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; for _, fld := range resp.Folders {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(fld.DisplayName)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go