En essayant de résoudre un problème de programmation impliquant plusieurs types de transactions et un type de base partagée, vous avez peut-être rencontré des difficultés lors de la mise en œuvre du polymorphisme. Examinons le concept de polymorphisme et abordons votre problème spécifique.
Dans Go, contrairement aux langages orientés objet, le polymorphisme est limité aux interfaces. Les interfaces définissent un ensemble de méthodes qui peuvent être implémentées par différents types.
Dans votre cas, vous tentiez de créer un type "de base", BaseTX, et deux types enfants, RewardTX et AllowanceTX. Ces types enfants avaient des champs supplémentaires par rapport à la base.
Le problème est survenu parce que vous avez défini une fonction, logicAndSaveTX, qui fonctionne sur l'interface TXapi. Cependant, l'implémentation de cette fonction opère sur le type BaseTX, conduisant à l'exclusion des champs supplémentaires des types enfants.
La solution réside dans la suppression de la notion de type "base". Considérez plutôt les métadonnées comme des champs communs partagés entre les transactions. Vous pouvez déclarer les métadonnées en tant que type distinct et les intégrer dans les types RewardTX et AllowanceTX. Chaque type peut alors avoir sa propre méthode logicAndSaveTX qui modifie des champs spécifiques.
Voici un exemple mis à jour :
type TXapi interface { logicAndSaveTX() } type Metadata struct { Field1 string Field2 string } type RewardTX struct { Metadata } func (tx RewardTX) logicAndSaveTX() { // Modify TX-specific fields tx.Field1 = "Reward Field 1" tx.Field2 = "Reward Field 2" // Logic and save metadata shared with AllowanceTX } type AllowanceTX struct { Metadata AddField string } func (tx AllowanceTX) logicAndSaveTX() { // Modify TX-specific fields tx.Field1 = "Allowance Field 1" tx.Field2 = "Allowance Field 2" tx.AddField = "Allowance Additional Field" // Logic and save metadata shared with RewardTX }
En adoptant la composition et en définissant des portées claires pour les méthodes, vous pouvez implémenter efficacement le polymorphisme via interfaces dans 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!