Maison > Article > développement back-end > Comment obtenir un polymorphisme en Go en utilisant la composition ?
Comprendre le polymorphisme en Go : une approche basée sur la composition
En Go, contrairement aux langages orientés objet, le polymorphisme est obtenu via des interfaces. Lorsque vous tentez d'implémenter le polymorphisme, il est important d'éviter le concept de classes/types « de base » pour les compositions.
Considérez le problème suivant :
Vous avez une structure BaseTX avec des champs pour les transactions et deux types spéciaux : RewardTX et AllowanceTX. Ce dernier nécessite un AddField supplémentaire. De plus, il existe une fonction logicAndSaveTX pour exécuter une certaine logique avant de sérialiser et d'enregistrer l'objet.
Cependant, dans votre implémentation actuelle, la propriété AddField n'est pas reconnue.
Au lieu de s'appuyer sur l'héritage, une approche plus idiomatique consiste à utiliser la composition. La structure de métadonnées peut contenir les champs partagés utilisés à la fois par RewardTX et AllowanceTX. Chaque structure peut ensuite implémenter sa propre méthode logicAndSaveTX :
func (tx RewardTX) logicAndSaveTX() { // Logic on Metadata fields tx.Field1 = "overwritten" tx.Field2 = "logic done" // ... } func (tx AllowanceTX) logicAndSaveTX() { // Logic on Metadata fields tx.Field1 = "overwritten" tx.Field2 = "logic done" tx.AddField = "more stuff" // ... }
En encapsulant le comportement (les méthodes) au sein de chaque type, vous pouvez éviter les pièges liés à la tentative d'appliquer des opérations d'un type à un autre. Au lieu de cela, vous pouvez concevoir un code clair et maintenable qui fonctionne sur les types spécifiques que vous devez gérer.
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!