Maison >développement back-end >Golang >Comment peut-on implémenter le polymorphisme sans héritage d'objet ?
Comprendre le polymorphisme dans Go
Le polymorphisme, la capacité d'un objet à prendre différentes formes, est implémenté dans Go via des interfaces.
Problème :
Considérez un scénario hypothétique avec une structure BaseTX représentant une transaction et deux types de transactions spécialisés : RewardTX et AllowanceTX. AllowanceTX étend BaseTX en ajoutant un champ supplémentaire. La tâche consiste à implémenter une fonction qui fonctionne sur les deux types de transactions, en sérialisant et en enregistrant leurs données respectives à l'aide de json.Marshal(). Cependant, l'implémentation actuelle ne sérialise que les champs de la structure BaseTX, en omettant le champ supplémentaire dans AllowanceTX.
Voici comment Modern Go aborde cela :
Go ne prend pas en charge les méthodes traditionnelles. héritage d'objets, s'appuyant uniquement sur des interfaces pour le polymorphisme. Pour résoudre ce problème, envisagez l'implémentation alternative suivante :
type TXapi interface { logicAndSaveTX() } type Metadata struct { Field1 string Field2 string } type RewardTX struct { Metadata } func (tx RewardTX) logicAndSaveTX() { // Logic to overwrite or modify `Metadata` fields ... fmt.Printf("saved this object: %+v \n", tx) } type AllowanceTX struct { Metadata AddField string } func (tx AllowanceTX) logicAndSaveTX() { // Logic to overwrite or modify `Metadata` fields ... // Additional logic for `AddField` ... fmt.Printf("saved this object: %+v \n", tx) }
Dans cette approche, les métadonnées deviennent une structure autonome, permettant un comportement spécialisé sur les champs de métadonnées intégrés dans chaque type RewardTX ou AllowanceTX. Les méthodes logicAndSaveTX() fonctionnent désormais spécifiquement sur leurs types respectifs, gérant de manière appropriée les champs communs et uniques.
Le polymorphisme dans Go est obtenu via des interfaces, offrant un moyen flexible et efficace de gérer divers types d'objets ayant un comportement similaire. En adoptant cette approche, vous évitez les limites de l'héritage traditionnel et utilisez pleinement les atouts de la conception basée sur l'interface de Go.
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!