Heim > Artikel > Backend-Entwicklung > Wie implementiert man Polymorphismus in Go without Base Types?
Beim Versuch, ein Programmierproblem mit mehreren Transaktionstypen und einem gemeinsam genutzten Basistyp zu lösen, sind Sie möglicherweise auf Herausforderungen bei der Implementierung von Polymorphismus gestoßen. Lassen Sie uns tiefer in das Konzept des Polymorphismus eintauchen und uns mit Ihrem spezifischen Problem befassen.
Im Gegensatz zu objektorientierten Sprachen ist Polymorphismus in Go auf Schnittstellen beschränkt. Schnittstellen definieren eine Reihe von Methoden, die von verschiedenen Typen implementiert werden können.
In Ihrem Fall haben Sie versucht, einen „Basis“-Typ, BaseTX, und zwei untergeordnete Typen, RewardTX und AllowanceTX, zu erstellen. Diese untergeordneten Typen hatten im Vergleich zur Basis zusätzliche Felder.
Das Problem entstand, weil Sie eine Funktion, „logicAndSaveTX“, definiert haben, die auf der TXapi-Schnittstelle arbeitet. Die Implementierung dieser Funktion arbeitet jedoch mit dem BaseTX-Typ, was zum Ausschluss der zusätzlichen Felder aus den untergeordneten Typen führt.
Die Lösung liegt in der Entfernung des Konzepts eines „Basis“-Typs. Stellen Sie sich Metadaten stattdessen als gemeinsame Felder vor, die von Transaktionen gemeinsam genutzt werden. Sie können Metadaten als separaten Typ deklarieren und in die Typen RewardTX und AllowanceTX einbetten. Jeder Typ kann dann seine eigene Methode „logicAndSaveTX“ haben, die bestimmte Felder ändert.
Hier ist ein aktualisiertes Beispiel:
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 }
Indem Sie die Komposition berücksichtigen und klare Bereiche für Methoden definieren, können Sie Polymorphismus effektiv implementieren Schnittstellen in Go.
Das obige ist der detaillierte Inhalt vonWie implementiert man Polymorphismus in Go without Base Types?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!