Maison >développement back-end >Golang >Comment intégrer une structure dans une autre structure avec MongoDB dans Golang sans perdre de données ?

Comment intégrer une structure dans une autre structure avec MongoDB dans Golang sans perdre de données ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 18:28:02529parcourir

How to Embed a Struct in Another Struct with MongoDB in Golang Without Losing Data?

Incorporer une structure dans une autre structure en Golang avec MongoDB

En Golang, intégrer une structure dans une autre structure vous permet d'hériter des champs du structure intégrée. Cependant, vous pouvez rencontrer des problèmes lorsque vous travaillez avec des structures intégrées et MongoDB, pouvant entraîner la perte de données de champ intégrées.

Comprendre le problème

Envisagez un scénario dans lequel vous devez fournir différentes réponses JSON pour une ressource utilisateur en fonction du rôle de l'utilisateur. Une réponse inclut un champ « Secret », qui ne doit être affiché que pour les administrateurs.

Dans votre code actuel, vous avez créé des structures distinctes pour User et adminUser, cette dernière contenant le champ « Secret ». Cependant, l'intégration de l'utilisateur dans adminUser à l'aide de l'héritage (tapez adminUser struct { User ; Secret string }) ne fonctionne pas comme prévu.

Solution

Pour résoudre ce problème, vous peut utiliser l'indicateur "inline" du package bson. En utilisant bson:",inline", vous pouvez intégrer les champs de la structure intégrée dans la structure parent.

type adminUser struct {
    User `bson:",inline"`
    Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}

Cette approche vous permet d'accéder aux deux champs de la structure User dans la structure adminUser.

Considérations supplémentaires

Notez que l'utilisation de bson:",inline" peut entraîner des erreurs de clé en double lors de la lecture à partir de la base de données, car les deux structures contiennent le champ "Secret". Pour éviter cela, il est recommandé de supprimer le champ « Secret » de la structure User et de l'inclure uniquement dans la structure adminUser. Cela garantit que le champ « Secret » n'est accessible que via la structure adminUser, fournissant le niveau de contrôle souhaité.

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