Comment ajouter des fonctionnalités partagées à des structures Go différenciées
Dans Go, vous pourriez rencontrer le besoin d'ajouter une méthode commune aux structures qui partagent un champ spécifique, tel que le champ Guid dans l'exemple suivant :
type ModelA struct { Guid string `orm:"pk"` FiledA string } type ModelB struct { Guid string `orm:"pk"` FiledB string }
Traditionnellement, on pourrait envisager d'utiliser un structure de base et en l'intégrant dans ModelA et ModelB. Cependant, cette approche peut ne pas fonctionner de manière transparente avec la bibliothèque orm.
Une solution viable implique l'utilisation d'interfaces. En définissant une interface, vous pouvez déclarer un contrat commun que ModelA et ModelB doivent implémenter :
type Savable interface { Save() }
Ensuite, implémentez la méthode Save() pour les deux structures :
func (a ModelA) Save() { // Implementation for ModelA } func (b ModelB) Save() { // Implementation for ModelB }
Maintenant , vous pouvez créer une variable de type Savable et l'attribuer à ModelA ou ModelB :
var i Savable i = ModelA{} i.Save()
Vous pouvez également utiliser un type intégré approche :
type ModelC struct { Guid string `orm:"pk"` } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Dans ce cas, définissez la méthode Save() dans la structure ModelC intégrée :
func (c ModelC) Save() { // Implementation }
Bien que cette approche semble simple, il est important de noter que l'o. L'instruction Insert(this) insérera uniquement les champs définis sur ModelC, pas ceux sur ModelA et ModelB.
Par conséquent, il est recommandé d'éviter d'utiliser l'intégration. lorsque vous devez encore référencer explicitement le type intégré. Dans de tels cas, l'approche de l'interface offre une plus grande flexibilité.
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!