Heim >Backend-Entwicklung >Golang >Kann die Funktion „decorator()' von Go Funktionen mit bestimmten Rückgabetypen ohne Generika verarbeiten?

Kann die Funktion „decorator()' von Go Funktionen mit bestimmten Rückgabetypen ohne Generika verarbeiten?

DDD
DDDOriginal
2024-12-26 19:47:31576Durchsuche

Can Go's `decorator()` function handle functions with specific return types without generics?

Übergabe beliebiger Funktionen an Parameter in Go

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!

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