Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-10-29 06:10:30538parcourir

 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
}

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!

Déclaration:
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