"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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) ?

Publié le 2024-11-10
Parcourir:870

 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 terminer 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 type concret correct.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3