In Go stimmt eine Schnittstellenmethode, die eine Schnittstelle zurückgibt, nur mit einer Implementierung überein, die die Schnittstelle selbst deklariert, nicht mit einer konkreten Typ, der die Schnittstelle implementiert. Betrachten Sie das folgende Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Dieser Code gibt den folgenden Fehler bei der Kompilierung aus:
1 |
|
Um dieses Problem zu beheben, sollte entweder die GetStringer-Methode im Bar-Typ einen fmt zurückgeben .Stringer-Schnittstelle anstelle eines konkreten *Foo-Typs, oder die StringerGetter-Schnittstelle sollte so geändert werden, dass sie einen konkreten Typ anstelle einer Schnittstelle akzeptiert.
In Fällen, in denen der externe konkrete Typ geändert wird oder die gemeinsame Schnittstelle nicht wünschenswert ist, gibt es zwei alternative Lösungen:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
Beide Ansätze ermöglichen es Ihnen, mit dem externen konkreten Typ zu arbeiten und gleichzeitig die gewünschte Schnittstellenimplementierung bereitzustellen, ohne den ursprünglichen Typ oder die gemeinsam genutzte Schnittstelle zu ändern.
Das obige ist der detaillierte Inhalt vonWarum erfüllt eine konkrete Typimplementierung eine Schnittstellenmethode nicht, die eine Schnittstelle in Go zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!