Erzielen eines funktionsaufrufähnlichen Verhaltens in Go
In Go erwarten Schlüsselwörter wie go und defer, dass Funktionen als Parameter übergeben werden. Es gibt jedoch eine Einschränkung, die die Übergabe tatsächlicher Funktionsaufrufe verhindert.
Antwort:
Leider gibt es keinen direkten Typ, der es Ihnen ermöglicht, Funktionsaufrufe als Argumente nachzuahmen. go und defer sind syntaktische Konstrukte, die durch die Sprachspezifikation unterstützt werden, und der Compiler erzwingt dieses Verhalten.
Alternativer Ansatz: Verwendung von Funktionswerten
Um diese Einschränkung zu umgehen, können Sie Folgendes tun Funktionswerte verwenden. Ein Funktionswert ist eine Variable oder ein Wert vom Typ Funktion. Sie können Funktionswerte später oder jederzeit bei Bedarf aufrufen.
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls the function value stored in f, which is myFunc in this case }</code>
Emulation der automatischen Parameterspeicherung
In den Kommentaren haben Sie den Wunsch nach einer automatischen Parameterspeicherung erwähnt . So können Sie dies mithilfe einer Hilfsfunktion erreichen, die eine umschlossene Funktion mit gespeicherten Parametern bereitstellt:
<code class="go">func wrapPrintln(s string) func() { return func() { fmt.Println(s) } } func launch(f func()) { fmt.Println("Before launch") go func() { defer fmt.Println("After completion") f() }() } func main() { s := "Hello, playground" launch(wrapPrintln(s)) }</code>
Reflexion als Option
Reflexion ist ein weiterer Ansatz zur Handhabung In diesem Szenario geht es jedoch darum, die Funktion als Schnittstelle zu übergeben und Reflektion zum Aufrufen zu verwenden. Dieser Ansatz ist weniger effizient als die Verwendung von Funktionswerten, ermöglicht aber die Handhabung von Funktionen mit unterschiedlichen Signaturen.
Zusammenfassend lässt sich sagen, dass es zwar keine direkte Möglichkeit gibt, Funktionsaufrufe als Argumente zu übergeben, Funktionswerte zu verwenden oder das Speichern von Parametern durch Hilfsprogramme nachzuahmen Funktionen bieten eine Problemumgehung, um ein ähnliches Verhalten zu erreichen.
Das obige ist der detaillierte Inhalt vonKönnen Sie Funktionsaufrufe als Argumente in Go übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!