Welche Möglichkeiten hat Go, Daten einfach in Bytes oder Strings umzuwandeln?

8

Ich habe einige Apps mit dem Google App Engine Go SDK entwickelt, die Memcache als Puffer zum Laden von Daten aus dem Datenspeicher verwenden. Da das Memcache nur Daten als []byte speichern kann, finde ich oft Funktionen, um die verschiedenen Strukturen als Strings zu codieren, und es funktioniert auch, um den Prozess umzukehren. Unnötig zu sagen, dass es ziemlich mühsam ist, wenn ich diese Art von Dingen fünfmal wiederholen muss.

Gibt es eine einfache Möglichkeit, eine beliebige Struktur, die in Datastore gespeichert werden kann, in []byte zu konvertieren, um sie in Memcache zu speichern und dann wieder zu laden, ohne benutzerdefinierten Code für verschiedene Strukturen in GAE Golang erstellen zu müssen?

    
ThePiachu 10.07.2012, 19:12
quelle

2 Antworten

5

Ссылка oder Ссылка kann beliebige Datentypen in [] Byte-Slices umwandeln, wenn bestimmte Regeln für die codierten Datenstrukturen gelten. Sie wollen wahrscheinlich eine von ihnen wird Gob zu kleineren Größen kodieren, aber Json ist leichter mit anderen Sprachen gemeinsam, wenn das eine Voraussetzung ist.

    
Jeremy Wall 10.07.2012, 19:47
quelle
0

Ich habe festgestellt, dass ich das Gleiche brauche. Also habe ich ein Paket namens:

erstellt

AEGo / ds

Dokumentation | Quelle

go get github.com/scotch/aego/ds

Es verwendet die gleiche API wie die "appengine/datastore" , so dass es als Ersatz verwendet wird.

%Vor%

Standardmäßig werden alle Put s und Get s in Memcache zwischengespeichert. Sie können dieses Verhalten jedoch ändern, indem Sie das ds.Register Methode:

%Vor%

Die Register -Methode verwendet eine Zeichenfolge, die Kind darstellt. und 3 bool - userDatastore , useMemcache , useMemory . Wenn Sie einen Wert für true übergeben, wird AEgo/ds den Datensatz für diesen Speicher beibehalten. Der Memory -Speicher ist nützlich für Datensätze, die nicht geändert werden sollen. Er kann jedoch veraltete Daten enthalten, wenn mehr als eine Instanz ausgeführt wird.

Unterstützte Methoden sind:

%Vor%

Hinweis: Derzeit erfolgt die Einlösung nur mit Get . GetMulti wird vom Datenspeicher abgerufen.

AEGo/ds ist in Arbeit, aber der Code ist gut getestet. Jede Rückmeldung wäre willkommen.

Und um Ihre Frage zu beantworten, habe ich die Entitäten serialisiert für die Memcache-Persistenz zu gob .

    
Kyle Finley 11.07.2012 20:11
quelle