Modèle de création de client
Dans Google App Engine, la recommandation générale est de réutiliser l'instance firestore.Client pour plusieurs appels. Toutefois, le choix d'un client unique ou d'un client par requête dépend de la version spécifique d'App Engine utilisée :
App Engine Standard avec Go 1.11 Runtime :
Avec le runtime Go 1.11, n'importe quel contexte peut être utilisé pour initialiser Firestore.Client. Cela permet la création de clients dans la fonction main() ou toute autre fonction utilisant le contexte d'arrière-plan. Les appels d'API peuvent ensuite être effectués au sein des gestionnaires de requêtes à l'aide du contexte de requête.
package main var client *firestore.Client func init() { var err error client, err = firestore.NewClient(context.Background()) // handle errors as needed } func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) // rest of the handler logic }
App Engine Standard avec Go Runtime avant la version 1.11 :
Dans les anciens environnements d'exécution Go , App Engine a imposé l'utilisation d'un contexte limité à une requête HTTP pour toutes les instances de bibliothèque cliente. Par conséquent, un nouveau firestore.Client a dû être créé par requête :
func main() { // Setup server s := &server{db: NewFirestoreClient()} // Setup Router http.HandleFunc("/people", s.peopleHandler()) // Starts the server to receive requests appengine.Main() } func (s *server) peopleHandler() http.HandlerFunc { // pass context in this closure from main? return func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() // appengine.NewContext(r) but should it inherit from background somehow? s.person(ctx, 1) // ... } } func (s *server) person(ctx context.Context, id int) { // what context should this be? _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p) // handle client results } func NewFirestoreClient() *Firestore { ctx := context.Background() client, err := firestore.NewClient(ctx, os.Getenv("GOOGLE_PROJECT_ID")) if err != nil { log.Fatal(err) } return &Firestore{ Client: client, } }
En suivant le modèle de création de client approprié basé sur la version d'App Engine, vous pouvez optimiser les performances et l'utilisation des ressources de vos applications Firestore.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!