Contexte :
Après des recherches et des tests approfondis, l'auteur estime que les méthodes intégrées dans Go ne peuvent pas accéder aux champs "parents". Cette question explore s'il existe des exceptions connues ou des approches alternatives.
Objectif :
L'objectif est de créer un ORM de style Active Record pour Go, où les opérations CRUD seraient être intégré dans la structure utilisateur. Cela offrirait une lisibilité et une abstraction accrues du magasin de données back-end.
Exemple :
L'extrait de code Go fourni tente d'accéder au champ "Nom" du " Foo" de la méthode "Test" de la structure "Bar" intégrée. Cependant, cela entraîne une erreur de compilation.
Question :
Existe-t-il un mécanisme dans Go qui permet aux méthodes intégrées d'accéder aux champs de la structure englobante ?
Réponse :
Go ne prend pas en charge l'accès direct aux champs parents dans les méthodes intégrées. Le type de récepteur de la méthode « Test » est un pointeur « Bar », et il n'y a aucun moyen pour la méthode de déterminer si ce pointeur est intégré ou autonome.
Solutions possibles :
Une solution de contournement consiste à ajouter un membre interface{} à la structure "Bar" et à exiger que le type conteneur soit attribué à ce membre. Cependant, ce n'est pas une solution élégante et introduit une complexité supplémentaire.
Approche alternative :
Au lieu d'intégrer des méthodes, l'auteur suggère d'utiliser une structure d'API différente, telle que "db.Save(user)" plutôt que "user.Save()". Cette approche permet une extension plus facile à plusieurs bases de données et réduit la dépendance à l'égard de l'état global.
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!