Nie mogę dowiedzieć się, jak zadzwonić pod numer cloud.WithContext
i google.DefaultClient
, jeśli mam appengine.Context
, a nie context.Context
.Jak utworzyć kontekst chmury.Context from appengine.Context
Istnieją (stare) pakiety "appengine" i (nowe) "google.golang.org/appengine". Pierwszy z nich przynosi zwyczaj appengine.Context
gdy drugi z nich wyposażony context.Context
z "golang.org/x/net/context"
Cały google.golang.org/cloud
oczekuje tylko context.Context
.
Byłbym szczęśliwy mogąc przejść do korzystania z nowego "google.golang.org/appengine"
, ale utknąłem z runtime.RunInBackground
, które nie zostały jeszcze przeniesione. Od https://github.com/golang/appengine:
appengine/aetest
,appengine/cloudsql
iappengine/runtime
nie zostały jeszcze przeniesione.
Co mogę napisać, jeśli appengine/runtime
zostały już przeniesione:
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)
…
})
}
ale nie ma jeszcze "google.golang.org/appengine/runtime"
. Więc mam
runtime.RunInBackground(c, func(ctx appengine.Context) {
Jeśli zrobię lewę z 'oauth2.NoContext', pojawia się błąd" nie jest kontekstem App Engine " –
Istnieje funkcja' BackgroundContext() context.Context' ale przeznaczona jest dla zarządzanego vm tylko https: // github. com/golang/appengine/blob/master/appengine_vm.go # L30 Wygląda na to, że powinienem używać zarządzanej maszyny wirtualnej do mojego zadania –