为了账号安全,请及时绑定邮箱和手机立即绑定

Golang GCP 存储客户端内存泄漏

Golang GCP 存储客户端内存泄漏

Go
缥缈止盈 2022-05-23 17:11:18
我在 github https://github.com/googleapis/google-cloud-go/issues/1025上阅读了以下问题,发现创建的空闲连接存在内存泄漏,因此将 http 客户端添加到 ClientOption 可以诡计。但是,我想使用“WithCredentialsFile”选项来实现它,但根据文档,“WithHTTPClient”不兼容。以下是我的方法:    client, err := storage.NewClient(ctx, option.WithCredentialsFile(cred), option.WithHTTPClient(httpClient))    if err != nil {        return err    }    defer client.Close()而且我总是收到以下错误:"googleapi: Error 401: Anonymous caller does not have storage.objects.create access to <filepath>, required"有什么解决方法吗?更新:我在调用 newClient 时尝试了以下方法来摆脱 withCred    os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", cre)    client, err := storage.NewClient(ctx, option.WithHTTPClient(httpClient))    if err != nil {        return err    }    defer client.Close()但它仍然导致上述错误。如果我尝试删除 withHttp 会导致内存泄漏(至少上传有效)
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

我不知道您如何创建 HttpClient。在任何情况下,如果你指定了你的 HTTPClient,它就会被使用,而这个默认不是

但是,使用的传输层是您的 HTTPClient 之一。默认情况下,它不嵌入库默认创建的安全层(并且使用您的凭据)。您必须在 HTTPClient 中重现此逻辑。

因此,当您调用端点时,您调用它时没有任何安全标头,因此,您的 401 错误是正常的。


查看完整回答
反对 回复 2022-05-23
?
森林海

TA贡献2011条经验 获得超2个赞

我相信这将允许您使用自己的 HTTP 客户端。


    import {

       gcpTransport "google.golang.org/api/transport/http"

    }


    ...


    httpClient.Transport, err = gcpTransport.NewTransport(ctx, option.WithCredentialsFile(cred))

    if err != nil {

        return err

    }

    client, err := storage.NewClient(ctx, option.WithHTTPClient(httpClient))

    if err != nil {

        return err

    }

    defer client.Close()


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信