Heim >Backend-Entwicklung >Golang >Wie kann ich einen konkreten Typ von einer Schnittstellenmethode in Go zurückgeben?

Wie kann ich einen konkreten Typ von einer Schnittstellenmethode in Go zurückgeben?

DDD
DDDOriginal
2024-10-26 22:23:03899Durchsuche

 How Can I Return a Concrete Type from an Interface Method in Go?

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!

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