Heim >Backend-Entwicklung >Golang >Wie implementiert man Polymorphismus in Go without Base Types?

Wie implementiert man Polymorphismus in Go without Base Types?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 00:31:03934Durchsuche

How to Implement Polymorphism in Go without Base Types?

Polymorphismus in Go verstehen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn