2016-08-09 44 views
1

Python ndb.Model verfügt über eine praktische _post_put_hook, wo Sie einige Arbeit nach dem Speichern der Entität im Datenspeicher ausführen können. Da Modelle in Go nur Strukturen sind, wie wird diese Funktion unterstützt?_post_put_hook in Go

Antwort

1

App Engine-Datenspeicheroperationen nehmen PropertyLoadSaver Schnittstelle als Eingabe. Zum Beispiel hat datastore.Put die folgende Signatur:

func Put(c context.Context, key *Key, src interface{}) (*Key, error) 

Mit der folgenden Dokumentation über src:

Put speichert die Einheit src in den Datenspeicher mit Schlüssel k. src muß einen struct Zeiger sein oder implementieren PropertyLoadSaver

Dies bedeutet, dass Sie Ihr eigenes Verhalten um verschiedene Datenspeichervorgänge umsetzen können. Ein Beispiel kann here gefunden werden.

+0

Dies wäre ein 'pre_put', kein' post_put'. –

+0

In Ihrer Interface-Methode 'Save' für Ihre Entität rufen Sie die Funktion' datastore.SaveStruct' zu einem bestimmten Zeitpunkt auf. Was auch immer Post-Put-Operation Sie benötigen, kann es nach diesem Aufruf je nach Erfolgsstatus gehen. – abhink

+1

Nein, Sie müssen die SaveStruct nicht aufrufen - siehe Beispiel unter docs - https://cloud.google.com/appengine/docs/go/datastore/reference#hdr-The_PropertyLoadSaver_Interface. Und selbst wenn Sie es anrufen, speichert es nicht in DB - einfach serialisieren zu Stück Eigenschaften. Http://cloud.google.com/appengine/docs/go/datastore/reference#SaveStruct Also in keiner Weise ist es ein Analogon von _post_put. Um einen _post_put zu haben, nehme ich an, Sie würden einen Wrapper über API benötigen und ihn überall verwenden. –