Home  >  Article  >  Backend Development  >  Can you Pass Function Calls as Arguments in Go?

Can you Pass Function Calls as Arguments in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 15:43:021089browse

Can you Pass Function Calls as Arguments in Go?

Achieving Function Call-like Behavior in Go

In Go, keywords like go and defer expect functions to be passed as parameters. However, there's a limitation that prevents passing actual function calls.

Answer:

Unfortunately, there's no direct type that allows you to mimic function calls as arguments. go and defer are syntactic constructs backed by the language specification, and the compiler enforces this behavior.

Alternative Approach: Using Function Values

To bypass this limitation, you can use function values. A function value is a variable or value of type function. You can call function values later or at any time it's needed.

<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>

Emulating Automatic Parameter Saving

In the comments, you mentioned the desire for automatic parameter saving. Here's how you can achieve this using a helper function that provides a wrapped function with saved parameters:

<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>

Reflection as an Option

Reflection is another approach to handle this scenario, but it involves passing the function as an interface and using reflection to call it. This approach is less efficient than using function values but allows handling functions with varying signatures.

In conclusion, while there isn't a direct way to pass function calls as arguments, using function values or mimicking parameter saving through helper functions provides a workaround for achieving similar behavior.

The above is the detailed content of Can you Pass Function Calls as Arguments in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn