Comment implémenter une méthode partagée pour une structure avec un champ commun dans Go
Lorsque vous traitez plusieurs structures partageant un champ commun, le il est souvent nécessaire d'implémenter une méthode commune pour ces structures. Bien que l'héritage ou les mixins puissent sembler des approches viables, ils sont confrontés à des limites dans Go.
Une approche consiste à définir une interface qui spécifie la méthode souhaitée, comme indiqué ci-dessous :
type Savable interface { Save() } // Satisfy Savable for ModelA func (m ModelA) Save() { // Implement Save() for ModelA } var i Savable i = SomeMethodThatReturnsMyModel() i.Save() // Call Save() on the implementing type SomeOtherMethodThatAcceptsASavableAndCallsSave(i)
Alternativement, l'intégration peut être utilisée pour réaliser la réutilisation du code. Cependant, cela nécessite une attention particulière, car les champs incorporés ne seront pas insérés lors de l'appel de o.Insert(this) à moins qu'ils ne soient également définis dans le type incorporé.
type ModelC struct { Guid string `orm:"pk"` } func (m ModelC) Save() { // Implement Save() for ModelC } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Il est important de se rappeler que l'incorporation ne prend en charge le remplacement des méthodes basées sur l'héritage. Redéfinir Save() dans la structure intégrée et appeler la méthode de la classe de base dans la redéfinition n'est pas considéré comme une bonne pratique dans Go.
Lorsque l'on considère entre les deux approches, il est essentiel d'évaluer les exigences spécifiques et les compromis impliqué. L'approche d'interface offre une plus grande flexibilité, tandis que l'intégration peut offrir des avantages en termes de performances mais nécessite un examen attentif du comportement du champ intégré.
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!