Funktions-Wrapper in Go: Code in Funktionsausführungen einfügen
Durch das Erstellen von Funktions-Wrappern können Entwickler vorhandene Funktionen verbessern, indem sie Code vor und nach ihren einfügen Ausführung. In Go erfordert diese Technik die Kenntnis der Signatur der Funktion, die umschlossen wird, und die Rückgabe eines Funktionswerts desselben Typs.
Im folgenden Beispiel definieren wir eine Wrapper-Funktion „wrapper“, die eine Funktion f und akzeptiert gibt eine neue Funktion zurück, die in Wrap eingeschlossen ist. Diese neue Funktion hat die gleiche Signatur wie f. Vor und nach der Ausführung von f gibt Wrap Nachrichten an die Konsole aus.
func wrap(f func(i int) int) func(i int) int { return func(i int) (ret int) { fmt.Println("Before, i =", i) ret = f(i) fmt.Println("After, ret =", ret) return } }
Um dies zu veranschaulichen, haben wir eine Funktion namens myfunc, die die Eingabenummer verdoppelt:
func myfunc(i int) int { fmt.Println("myfunc called with", i) return i * 2 }
Indem wir myfunc mit der Wrap-Funktion umschließen, können wir unsere eigene anhängen Funktionalität.
wf := wrap(myfunc) ret := wf(2) fmt.Println("Returned:", ret)
Ausgabe:
Before, i = 2 myfunc called with 2 After, ret = 4 Returned: 4
Unterstützung mehrerer Funktionstypen
Da Go keine Generika enthält, muss eine spezifische Wrapper-Funktion erstellt werden für jeden zu unterstützenden Funktionstyp. Alternativ kann mit „reflect.MakeFunc()“ eine Wrapper-Funktion geschrieben werden, um mehrere Funktionstypen zu verarbeiten, obwohl dieser Ansatz zu Komplexität führen kann.
Für Funktionen ohne Parameter oder Rückgabewerte kann die Wrap-Funktion leicht modifiziert werden:
func wrap(f interface{}) interface{} { switch f2 := f.(type) { case func(i int) (ret int): // ... case func(): // ... } return nil }
Zusammenfassend lässt sich sagen, dass Funktions-Wrapper in Go eine Möglichkeit bieten, das Verhalten vorhandener Funktionen zu ändern, ohne deren Quellcode zu ändern. Entwickler können diese Wrapper anpassen, um bestimmte Anforderungen zu erfüllen und die Codeflexibilität zu verbessern.
Das obige ist der detaillierte Inhalt vonWie können Funktions-Wrapper in Go Code vor und nach der Funktionsausführung einschleusen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!