Maison > développement back-end > Golang > Comment désassembler des nœuds intégrés de différents types à l'aide d'interfaces dans mgo (Go) ?

Comment désassembler des nœuds intégrés de différents types à l'aide d'interfaces dans mgo (Go) ?

Patricia Arquette
Libérer: 2024-10-29 06:10:30
original
567 Les gens l'ont consulté

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

Comment utiliser une interface comme modèle dans mgo (Go)

Lorsque vous traitez des flux de travail contenant plusieurs nœuds intégrés de différents types, tirer parti des interfaces Go est une approche courante. Cependant, cela présente un défi lorsque l'on tente de désorganiser ces documents à l'aide de mgo.

Pour résoudre ce problème, vous ne pouvez pas inclure directement une interface dans un document. En effet, le décodeur ne dispose pas des informations de type nécessaires pour créer l'instance appropriée.

Une solution viable consiste à créer une structure wrapper pour stocker à la fois le nœud réel et son type :

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

type Workflow struct {
   CreatedAt time.Time
   StartedAt time.Time
   CreatedBy string
   Nodes []NodeWithType
}
Copier après la connexion

Pour terminez la configuration, vous devez implémenter la fonction SetBSON sur NodeWithType. Cette fonction décodera la chaîne de type, instanciera le type de nœud correct en fonction de cette chaîne, puis désorganisera le document dans l'instance nouvellement créée. L'implémentation de SetBSON garantit que chaque nœud intégré est correctement désorganisé dans le bon type de béton.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal