Heim >Backend-Entwicklung >Golang >Kann die Funktion „decorator()' von Go Funktionen mit bestimmten Rückgabetypen ohne Generika verarbeiten?
In Go ermöglicht die Übergabe von Funktionen als Parameter eine größere Flexibilität und Wiederverwendung von Code. Beim Versuch, Funktionen mit unterschiedlichen Signaturen als Parameter zu übergeben, gibt es jedoch Einschränkungen.
Stellen Sie sich das Szenario vor, in dem Sie eine decorator()-Funktion erstellen möchten, die jede vorhandene Funktion umschließen kann. Bei Funktionen mit einem einzelnen Parameter und Rückgabewert (z. B. funcA) ist dies einfach, wenn Sie func(interface{}) interface{} als Parametertyp verwenden.
Frage: Kann eine Funktion sein B. funcB, das bestimmte Typen (in diesem Fall String) akzeptiert und zurückgibt, aus Kompatibilitätsgründen in einen func(interface{}) interface{}-Typ konvertiert werden decorator()?
Antwort: Leider ist dies in Go ohne die Verwendung von Generika nicht möglich. Der Grund liegt in den grundlegenden Unterschieden in der Parameterübergabemechanik zwischen Funktionen.
Zum Beispiel empfängt eine Funktion, die eine Struktur als Argument akzeptiert, jedes ihrer Mitglieder einzeln. Umgekehrt erhält eine Funktion, die eine Schnittstelle{} akzeptiert, die diese Struktur enthält, zwei Werte: einen Deskriptor für den Typ der Struktur und einen Zeiger auf die Struktur.
Um das gewünschte Verhalten zu erreichen, wäre daher eine Adapterfunktion erforderlich um die Lücke zwischen der Signatur der ursprünglichen Funktion und dem erwarteten Typ func(interface{}) interface{} zu schließen.
Das obige ist der detaillierte Inhalt vonKann die Funktion „decorator()' von Go Funktionen mit bestimmten Rückgabetypen ohne Generika verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!