Home >Backend Development >Golang >How Can I Pass Function Calls as Arguments in Go?
Passing Function Calls as Arguments in Go
In Go, keywords like go and defer require function calls as parameters. While there isn't a designated type for such usage, we can leverage various techniques to achieve a similar result.
Using a Function Variable/Value
We can define a variable of function type and assign it a function. This allows us to call the function as if it were stored in the variable.
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls myFunc }</code>
Wrapping Function Calls with Parameters
To accommodate function calls with arguments, we can wrap the call within a function and pass the wrapped function.
<code class="go">func launch(f func()) { fmt.Println("Before launch") go func() { defer fmt.Println("After completion") f() }() }</code>
We can use it as follows:
<code class="go">func main() { launch(func() { fmt.Println("Hello, playground") }) time.Sleep(time.Second) }</code>
Helper Functions for Automatic Parameter Saving
For specific function types, we can create helper functions to provide automatic parameter saving. These helper functions have the same signature as the original function and return a parameterless function.
Using Reflection for Dynamic Functions
Using reflection, we can invoke functions dynamically without requiring manual copies. However, it's slower and less type-safe than other methods.
Method Values
Method values, which save a copy of the receiver object, are an exception where automatic parameter saving is possible. Method values can be used without invoking the method directly.
While Go lacks a specific type for function calls, these techniques offer various ways to pass function calls as arguments, including with arguments or automatic parameter saving.
The above is the detailed content of How Can I Pass Function Calls as Arguments in Go?. For more information, please follow other related articles on the PHP Chinese website!