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!