Wie gehe ich mit dem Fehler „Datastore: Das Reduzieren verschachtelter Strukturen führt zu einem Slice-Slice' im Go Datastore um?

DDD
Freigeben: 2024-10-25 16:35:51
Original
785 Leute haben es durchsucht

How to Handle

Umgang mit verschachtelten Slices im Go-Datenspeicher: Fehler und Lösungen

Beim Versuch, Google AppEngine-Datenspeicherentitäten in ein Go-Projekt zu laden, kann es zu Problemen kommen der folgende Fehler: „Datenspeicher: Das Reduzieren verschachtelter Strukturen führt zu einem Slice-Slice: Feld ‚Nachrichten‘“. Dieser Fehler tritt auf, wenn die Go-Modelldefinition ein Segment einer Struktur enthält, die auch ein Segment enthält.

Um dieses Problem zu beheben, ist es wichtig zu verstehen, dass der Go-Datenspeicher keine mehrschichtigen Slices unterstützt. Entwickler haben die folgenden Optionen:

  1. Verwendung mehrschichtiger Slices vermeiden: Stellen Sie sicher, dass die Go-Modelldefinition kein Slice einer Struktur enthält, die über ein eigenes Slice verfügt. Behalten Sie es entweder als einzelnes Segment der Struktur der obersten Ebene bei oder verwenden Sie die Struktur der obersten Ebene mit darin enthaltenen Slices.
  2. Schreiben Sie einen benutzerdefinierten Deserialisierer: Für fortgeschrittene Benutzer: Schreiben eines benutzerdefinierten Deserialisierers Die Behandlung der spezifischen Struktur, die den Fehler verursacht, kann eine Option sein. Dieser Ansatz erfordert jedoch möglicherweise einen erheblichen Aufwand und wird nicht in allen Fällen empfohlen.
  3. Datenstrukturen ändern und Daten neu erstellen: Ändern Sie nach Möglichkeit die Datenstrukturen in Python und erstellen Sie die Daten so neu Es erfüllt die Go-Datenspeicheranforderungen. Dabei müssen die Daten so organisiert werden, dass die verschachtelte Slice-Konfiguration, die den Fehler verursacht, eliminiert wird.

Beispiel:

Berücksichtigen Sie die folgenden Modelldefinitionen:

Python:

<code class="python">class ModelB(ndb.Model):
    msg_id = ndb.StringProperty(indexed=False)
    ...

class ModelA(ndb.Model):
    ...
    messages = ndb.LocalStructuredProperty(ModelB, name='bm', repeated=True)</code>
Nach dem Login kopieren

Go:

<code class="go">type ModelB struct {
    MessageID string `datastore:"msg_id,noindex"`
    ...
}

type ModelA struct {
    ...
    Messages []ModelB `datastore:"bm,"`
}</code>
Nach dem Login kopieren

In diesem Fall tritt der Fehler auf, weil das Go-Modell definiert ein Teil von ModelB (ModelA.Messages). ModelB selbst verfügt jedoch über einen Slice (ModelB.MessageID). Um das Problem zu beheben, stellen Sie entweder sicher, dass ModelA.Messages ein flaches Segment von ModelB ist, oder entwerfen Sie die Datenstruktur neu, um verschachtelte Segmente zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit dem Fehler „Datastore: Das Reduzieren verschachtelter Strukturen führt zu einem Slice-Slice' im Go Datastore um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!