Heim >Backend-Entwicklung >Golang >Wie kann ich einen konkreten Typ von einer Schnittstellenmethode in Go zurückgeben?
Schnittstellenmethode, die Schnittstelle und konkrete Typen zurückgibt
In Go bietet eine Schnittstellenmethode, die eine Schnittstelle zurückgibt, Flexibilität für Typimplementierungen. Der Versuch, eine solche Methode mit einem konkreten Typ zu implementieren, kann jedoch zu Fehlern führen.
Betrachten Sie das Beispiel:
<code class="go">func GetStringer() fmt.Stringer</code>
Wobei GetStringer eine Schnittstellenmethode ist, die die fmt.Stringer-Schnittstelle zurückgibt.
Wenn ein konkreter Typ wie Foo implementiert wird, um einen Wert von sich selbst (*Foo) zurückzugeben, tritt ein Fehler auf. Dies liegt daran, dass Foo fmt.Stringer nicht direkt implementiert.
Um dieses Problem zu lösen, können verschiedene Ansätze gewählt werden:
Verwendung eines Adaptertyps
Erstellen Sie einen Adaptertyp, der den konkreten Typ umschließt und der erforderlichen Schnittstelle entspricht:
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
Dieser Ansatz ermöglicht eine Erweiterung ohne Änderung des ursprünglichen Typs Bar.
Umbruch mit Schnittstelle
Alternativ kann der konkrete Typ direkt mit der erforderlichen Schnittstelle umschlossen werden:
<code class="go">func (b *Bar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
Hier stellt der konkrete Typ Bar eine Implementierung der GetStringer-Methode bereit, die eine Instanz zurückgibt vom Typ Foo, der fmt.Stringer implementiert.
Beide Methoden bieten Optionen zum Unterbringen von Schnittstellenmethodenrückgaben mit konkreten Typen in Go. Der geeignete Ansatz hängt von den spezifischen Anforderungen und der Architektur des Codes ab.
Das obige ist der detaillierte Inhalt vonWie kann ich einen konkreten Typ von einer Schnittstellenmethode in Go zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!