„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entmarshaliere ich eingebettete Knoten verschiedener Typen mithilfe von Schnittstellen in mgo (Go)?

Wie entmarshaliere ich eingebettete Knoten verschiedener Typen mithilfe von Schnittstellen in mgo (Go)?

Veröffentlicht am 10.11.2024
Durchsuche:854

 How to Unmarshal Embedded Nodes of Different Types Using Interfaces in mgo (Go)?

So verwenden Sie eine Schnittstelle als Modell in mgo (Go)

Beim Umgang mit Workflows, die mehrere eingebettete Knoten unterschiedlichen Typs enthalten, Die Nutzung von Go-Schnittstellen ist ein gängiger Ansatz. Es stellt jedoch eine Herausforderung dar, wenn man versucht, diese Dokumente mit mgo zu entmarshalieren.

Um dieses Problem zu beheben, können Sie eine Schnittstelle nicht direkt in ein Dokument einschließen. Dies liegt daran, dass dem Decoder die notwendigen Typinformationen fehlen, um die entsprechende Instanz zu erstellen.

Eine praktikable Lösung besteht darin, eine Wrapper-Struktur zu erstellen, um sowohl den tatsächlichen Knoten als auch seinen Typ zu speichern:

type NodeWithType struct {
   Node Node `bson:"-"`
   Type string
}

type Workflow struct {
   CreatedAt time.Time
   StartedAt time.Time
   CreatedBy string
   Nodes []NodeWithType
}

Um die Einrichtung abzuschließen, müssen Sie die SetBSON-Funktion auf NodeWithType implementieren. Diese Funktion dekodiert die Typzeichenfolge, instanziiert den richtigen Knotentyp basierend auf dieser Zeichenfolge und entmarshmiert dann das Dokument in der neu erstellten Instanz. Durch die Implementierung von SetBSON wird sichergestellt, dass jeder eingebettete Knoten ordnungsgemäß in den richtigen konkreten Typ entmarshallt wird.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3