Fehlermeldung:
cannot use &f (type *Bar) as type StringerGetter in argument to Printer: *Bar does not implement StringerGetter (wrong type for GetStringer method) have GetStringer() *Foo want GetStringer() fmt.Stringer
In Go basieren Schnittstellenmethoden auf genaue Typübereinstimmung. Das bedeutet, dass eine Funktion, die eine Schnittstelle zurückgibt, sowohl in der Schnittstelle als auch in ihrer Implementierung genau denselben Typ haben muss. Wenn sie nicht übereinstimmen, generiert Go einen Fehler bei der Kompilierung.
In diesem Fall gibt Ihre Schnittstelle StringerGetter eine Methode GetStringer() an, die einen fmt.Stringer zurückgibt. Die Implementierung von GetStringer() in Ihrem konkreten Typ Bar gibt jedoch einen Zeiger auf eine Foo-Struktur zurück, die kein fmt.Stringer ist. Diese Nichtübereinstimmung verursacht den Fehler bei der Kompilierung.
Lösungen:
Implementieren Sie die Schnittstelle genau:
Umschließen Sie den konkreten Typ in einen neuen Typ:
Assertion verwenden:
Wichtige Überlegungen:
Das obige ist der detaillierte Inhalt vonHier sind ein paar Titeloptionen, die mit dem „Warum' und dem „Wie' des Fehlers spielen: Betonung des „Warum' * Warum gibt mein Go-Code die Fehlermeldung „cannot use... as type St' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!