„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum kann ich keine "t" -Typvariable als "Stringer" in Go Generics verwenden?

Warum kann ich keine "t" -Typvariable als "Stringer" in Go Generics verwenden?

Gepostet am 2025-03-24
Durchsuche:670

Why Can't I Use a `*T` Type Variable as a `Stringer` in Go Generics?

Der Go -Compiler erhöht einen Fehler, weil:

Identität und Parameter eingeben:

T ist nicht von Natur aus mit seiner Einschränkung foobar äquivalent. Daher ist *t nicht dasselbe wie *foobar oder *bar.
  • fehlende Methode: Die Stringer -Schnittstelle erfordert eine Methode mit dem Namen a (). Derzeit implementieren Ihre Foo- und Bar -Typen diese Methode auf Zeigerempfänger, aber *t besitzt diese Methode nicht von Natur aus. Achten Sie auf Sicherheit mit Typ Assertion (weniger optimal)
  • behaupten, dass *t Stringer mit irgendeinen (t). (Stringer) innerhalb der do function implementiert. Die Einschränkung neu definieren und Generika anpassen (bevorzugt)

Fügen Sie Stringer als Einschränkung der Foobar -Schnittstelle hinzu. Schnittstelle.

Übergeben Sie eine Instanz des eingeschränkten Typs als Argument an bla.

überarbeiteter Code:

    type foobar [t foo | Bar] Schnittstelle { *T Stringer } func bla [t foo | bar, u foobar [t]] () { var t t Do (u (& t)) } func main () { bla [foo] () }
  • in diesem überarbeiteten Code:
Die Foobar -Schnittstelle enthält Stringer als Einschränkung. Einschränkungen.

bla nimmt ein Argument vom Typ u, was eine Instanz der eingeschränkten Foobar -Schnittstelle ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3