Incorporation de structures dans Golang avec MongoDB
Dans Golang, l'intégration de structures est une technique permettant d'étendre les fonctionnalités d'une structure en l'imbriquant dans une autre structurer. Cependant, lorsqu'il s'agit de travailler avec des structures intégrées et MongoDB, certains défis peuvent survenir.
Le problème : exclure les champs imbriqués de la réponse JSON
Considérez la structure utilisateur suivante :
type User struct { Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Secret string `json:"-,omitempty" bson:"secret,omitempty"` }
Le champ Secret est exclu de la représentation JSON en utilisant json:"-". Ceci est utile dans la plupart des cas où les informations secrètes ne doivent pas être divulguées.
Le dilemme : routes d'administration et structures intégrées
Pour permettre aux administrateurs d'accéder au champ secret , une structure adminUser est créée, qui inclut la structure User en tant que champ intégré :
type adminUser struct { User Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
Cependant, cela L'approche renvoie uniquement le champ Secret, car les champs Utilisateur intégrés sont ignorés.
La solution : bson Inline Flag
Pour résoudre ce problème, le package bson fournit un indicateur en ligne drapeau qui permet l'inclusion de champs intégrés dans la sérialisation JSON et le décodage de documents MongoDB.
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
Avec cette modification, les champs Utilisateur (hors Secret) et le champ Secret dans adminUser sera inclus dans la réponse JSON et le document MongoDB.
Approche alternative
Alternativement, on pourrait envisager de supprimer le champ Secret de la structure User et incluez-le uniquement dans la structure adminUser. Cela simplifie le modèle de données et garantit que les secrets ne sont écrits et lus dans la base de données que par des administrateurs autorisés.
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!