Heim  >  Artikel  >  Backend-Entwicklung  >  Hier 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?

Hier 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?

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 05:25:031016Durchsuche

Here are a few title options,  playing with the

Verstehen der Nichtübereinstimmung des Rückgabetyps der Schnittstellenmethode

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:

  1. Implementieren Sie die Schnittstelle genau:

    • Ändern Sie die GetStringer()-Methode in Bar, um direkt einen fmt.Stringer zurückzugeben.
  2. Umschließen Sie den konkreten Typ in einen neuen Typ:

    • Erstellen Sie einen neuen Typ, z. B. MyBar, der Bar einbettet und StringerGetter mithilfe der eingebetteten GetStringer()-Methode von Bar implementiert. Dadurch können Sie sich an die Schnittstelle anpassen und gleichzeitig die Funktionalität von Bar beibehalten.
  3. Assertion verwenden:

    • Bestätigen Sie den konkreten Typ Bar, um fmt.Stringer einzugeben, bevor es von der GetStringer()-Methode zurückgegeben wird. Beachten Sie, dass diese Lösung potenzielle Auswirkungen auf Leistung und Laufzeit hat.

Wichtige Überlegungen:

  • Schnittstellen geben nur Methodensignaturen an. keine Methodenimplementierungen.
  • Wenn ein konkreter Typ eine Methode mit einer anderen Signatur implementiert, als eine Schnittstelle erfordert, wird dies nicht als Implementierung der Schnittstelle betrachtet.
  • Typzusicherungen können in bestimmten Szenarien nützlich sein , sollte jedoch mit Vorsicht verwendet werden, um Laufzeitfehler und Leistungseinbußen zu vermeiden.

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!

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