Heim >Backend-Entwicklung >Golang >Wie entmarshaliere ich eingebettete Knoten unterschiedlichen Typs mithilfe von Schnittstellen in mgo (Go)?

Wie entmarshaliere ich eingebettete Knoten unterschiedlichen Typs mithilfe von Schnittstellen in mgo (Go)?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 06:10:30588Durchsuche

 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 einbinden. 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
}

An 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.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich eingebettete Knoten unterschiedlichen Typs mithilfe von Schnittstellen in mgo (Go)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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