Parametrisierte Funktionen in Go verstehen
In Go führt die Übergabe von Funktionen als Parameter aufgrund des Typsystems der Sprache zu bestimmten Einschränkungen. In diesem Artikel werden die Einschränkungen und möglichen Lösungen für die Übergabe von Funktionen, die bestimmte Datentypen akzeptieren, an Dekoratoren untersucht.
Funktionen in Go dekorieren
Betrachten Sie das Beispiel einer Dekoratorfunktion, die dies kann umschließt jede vorhandene Funktion. Der Einfachheit halber empfangen und geben diese Funktionen einen einzelnen Wert zurück. Dekorateure können Argumente vom Typ func(interface{}) interface{} akzeptieren, die gut mit Funktionen funktionieren, die Schnittstellen akzeptieren und zurückgeben, wie funcA.
Typkonvertierungsdilemma
Allerdings , stellt sich die Frage: Kann eine Funktion wie funcB, die einen String akzeptiert und einen String zurückgibt, in einen func(interface{}) interface{}-Typ konvertiert werden? Die Antwort ist nein.
Erklärung
In Go beinhaltet die Übergabe von Parametern den Abgleich von Funktionssignaturen. Eine Funktion, die einen String als Argument erwartet, akzeptiert kein interface{} ohne explizite Typumwandlung. Ein Interface{}-Argument ermöglicht einen breiten Wertebereich, wird aber nicht automatisch in bestimmte Typen wie Zeichenfolgen konvertiert.
Lösung: Adapterfunktion
Um dies zu überbrücken Lücke können wir eine Adapterfunktion einführen, die die Eingabezeichenfolge in eine Schnittstelle{} umwandelt und dann funcB aufruft. Diese Adapterfunktion kann dann an die Dekoratorfunktion übergeben werden, da sie dem erwarteten Typ entspricht.
Fazit
Während es unmöglich ist, beliebige Funktionen in eine generische Funktion umzuwandeln (interface{}) interface{}-Typ ohne Generics in Go bietet die Verwendung von Adapterfunktionen eine Problemumgehung. Dieser Ansatz ermöglicht uns die nahtlose Integration von Nicht-Schnittstellenfunktionen in Dekoratoren, die deren Funktionalität verbessern können.
Das obige ist der detaillierte Inhalt vonKönnen Go-Dekoratoren Funktionen mit bestimmten Datentypen ohne Generics verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!