Implementieren von Schnittstellen mit identischen Methodensignaturen aus separaten Paketen
In Go ist es nicht möglich, zwei verschiedene Schnittstellen mit derselben Methodensignatur zu implementieren verschiedene Pakete. Normalerweise erwartet jeder Schnittstellentyp eine spezifische Implementierung, um die Typsicherheit zu gewährleisten.
Wenn ein Objekt jedoch mehrere Schnittstellen mit identisch benannten Methoden erfüllen muss, kann es schwierig sein, eine konsistente Logik für alle Schnittstellen zu implementieren.
Fallbeispiel:
Betrachten Sie zwei Pakete A und B, die Schnittstellen Doer mit identischen Methodensignaturen enthalten:
package A type Doer interface { Do() string }
package B type Doer interface { Do() string }
Problem :
Im Paket main ist ein einzelnes Objekt C so konzipiert, dass es sowohl A.Doer als auch B.Doer implementiert:
package main func (c C) Do() string { return "C now implements both A and B" }
Diese Implementierung verursacht jedoch einen Fehler, wenn Rufen Sie B.FuncB(c) auf, da die in C implementierte Do-Methode nur für A.Doer gedacht ist.
Lösung:
Mit der Einbettungsfunktion von Go werden Wrapper-Typen getrennt kann erstellt werden:
Durch die Übergabe des entsprechenden Wrapper-Typs als Argument an A.FuncA und B.FuncB kann die gewünschte Logik für jede Schnittstelle beibehalten werden.
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie implementiert man Schnittstellen mit identischen Methodensignaturen aus separaten Paketen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!