Wie kann ich Methoden auf Go-Schnittstellen ohne Mehrfachvererbung effektiv implementieren?

Linda Hamilton
Freigeben: 2024-11-23 02:00:34
Original
590 Leute haben es durchsucht

How Can I Effectively Implement Methods on Go Interfaces Without Multiple Inheritance?

Warum Schnittstellen in Go verwenden?

Schnittstellen in Go ermöglichen Polymorphismus, sodass Sie generische Typen erstellen können, die mit jedem Typ funktionieren können, der diese Schnittstellen implementiert. Im Gegensatz zu Sprachen wie Java oder C unterstützt Go jedoch keine Mehrfachvererbung. Dies wirft die Frage auf, wie bestimmte Entwurfsmuster erreicht werden können, beispielsweise die Verwendung eines Typs, der zwei Schnittstellen „implementieren“ soll, ohne Vererbung.

Ihr Anwendungsfall

Um Ihren Strukturtyp auszublenden und darzustellen es als Schnittstelle:

type Card interface {
    GetFace() string
    GetSuit() string
}
Nach dem Login kopieren

Sie möchten auch eine String()-Methode für Ihre Kartenschnittstelle definieren, dies stellt jedoch eine Herausforderung dar, da Sie keine Schnittstelle an die übergeben können Implementierung der String()-Methode.

Alternativer Ansatz

Anstatt das Anti-Pattern zu verwenden, Ihre Struktur zu verbergen und nur die Schnittstelle zu exportieren, sollten Sie den folgenden Ansatz in Betracht ziehen:

Exportieren Sie a Zeiger auf die Struktur

Verstecken Sie Ihre Strukturfelder, um externe Änderungen zu verhindern, aber exportieren Sie einen Zeiger auf it:

type Card struct {
    // ... struct fields here
}

func NewCard(...) *Card {
    // ...
}
Nach dem Login kopieren

Implementieren Sie String() für den Zeigertyp

Definieren Sie eine String()-Methode für den Zeiger auf Ihre Kartenstruktur:

func (c *Card) String() string {
    // ...
}
Nach dem Login kopieren

Dieser Ansatz ermöglicht Ihnen Folgendes:

  • Strukturdetails ausblenden, während die Schnittstelle verfügbar gemacht wird.
  • Behalten Die Schnittstelle ist von bestimmten Implementierungen entkoppelt.
  • Stellen Sie eine String()-Darstellung für Clients bereit, die die Schnittstelle verwenden.

Fazit

Während das Muster „Schnittstellenversteckung“ auf den ersten Blick erscheinen mag Wenn sie ansprechend sind, kann dies zu einer schlechten Kapselung führen, die Dokumentation beeinträchtigen und zu unnötiger Komplexität führen. Der empfohlene Ansatz, einen Zeiger auf die Struktur zu exportieren und die String()-Methode für den Zeigertyp zu implementieren, bietet eine sauberere und effektivere Lösung.

Das obige ist der detaillierte Inhalt vonWie kann ich Methoden auf Go-Schnittstellen ohne Mehrfachvererbung effektiv implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage