如何从 appengine.Context 创建云 context.Context

我不知道如何打电话cloud.WithContextgoogle.DefaultClient如果我有appengine.Context和没有context.Context

有(旧)“appengine”和(新)“google.golang.org/appengine”包。第一个自定义带来了appengine.Context当第二个带有context.Context"golang.org/x/net/context"

整体google.golang.org/cloud期待context.Context而已。

我很乐意改用 new "google.golang.org/appengine",但我一直坚持使用runtime.RunInBackground尚未移植的内容。来自https://github.com/golang/appengine

appengine/aetestappengine/cloudsql并且appengine/runtime还没有移植。

如果appengine/runtime已经移植,我可以写什么:

import (

    "golang.org/x/net/context"


    "google.golang.org/appengine"

    "google.golang.org/appengine/runtime"

    "google.golang.org/cloud"

    "google.golang.org/cloud/storage"

)


func handler(w http.ResponseWriter, r *http.Request) {

    c := appengine.NewContext(r)

    runtime.RunInBackground(c, func(ctx context.Context) {

        hc, _ := google.DefaultClient(ctx, storage.ScopeFullControl)

        cc := cloud.WithContext(ctx, appengine.AppID(ctx), hc)

        …

   })

}

但还没有"google.golang.org/appengine/runtime"。所以我有


runtime.RunInBackground(c, func(ctx appengine.Context) {


沧海一幻觉
浏览 160回答 3
3回答

杨__羊羊

做这个:func getCloudContext(appengineContext context.Context) context.Context {    hc := &http.Client{        Transport: &oauth2.Transport{            Source: google.AppEngineTokenSource(appengineContext, storage.ScopeFullControl),            Base:   &urlfetch.Transport{Context: appengineContext},        },    }    return cloud.NewContext(appengine.AppID(appengineContext), hc)}或者,如果通过开发服务器传递凭据不起作用,您也可以使用显式凭据:func getCloudContext(aeCtx context.Context) (context.Context, error) {    data, err := ioutil.ReadFile("/path/to/credentials.json")    if err != nil {        return nil, err    }    conf, err := google.JWTConfigFromJSON(        data,        storage.ScopeFullControl,    )    if err != nil {        return nil, err    }    tokenSource := conf.TokenSource(aeCtx)    hc := &http.Client{        Transport: &oauth2.Transport{            Source: tokenSource,            Base:   &urlfetch.Transport{Context: aeCtx},        },    }    return cloud.NewContext(appengine.AppID(aeCtx), hc), nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go