0
0
GoHow-ToBeginner · 3 min read

How to Return Function from Function in Go: Simple Guide

In Go, you can return a function from another function by specifying the return type as a function signature using func. The returned function can then be called like any other function. This allows you to create flexible and reusable code blocks.
📐

Syntax

To return a function from a function in Go, you declare the return type as a function signature. This signature includes the parameters and return types of the function you want to return.

  • func outer() func(): outer returns a function that takes no parameters and returns nothing.
  • You can specify parameters and return types inside the returned function's signature.
go
func outer() func() {
    return func() {
        // function body
    }
}
💻

Example

This example shows a function makeGreeter that returns another function. The returned function prints a greeting message when called.

go
package main

import "fmt"

func makeGreeter(name string) func() {
    return func() {
        fmt.Println("Hello, " + name + "!")
    }
}

func main() {
    greetJohn := makeGreeter("John")
    greetJohn() // Calls the returned function
}
Output
Hello, John!
⚠️

Common Pitfalls

One common mistake is forgetting to specify the correct function signature as the return type. Another is not calling the returned function properly.

Wrong: Returning a function but not calling it later.

Right: Store the returned function in a variable and call it.

go
package main

import "fmt"

// Wrong: returns a function but does not call it
func wrong() func() {
    return func() {
        fmt.Println("This won't run unless called")
    }
}

// Right: call the returned function
func right() func() {
    return func() {
        fmt.Println("This runs when called")
    }
}

func main() {
    f := wrong() // returns function but does not call
    // f() // Uncomment to call and see output

    g := right()
    g() // Calls the returned function
}
Output
This runs when called
📊

Quick Reference

Remember these key points when returning functions in Go:

  • Specify the return type as a function signature.
  • The returned function can capture variables from the outer function (closure).
  • Call the returned function by storing it in a variable or directly.

Key Takeaways

Use a function signature as the return type to return a function from another function in Go.
Returned functions can capture and use variables from the outer function (closures).
Always call the returned function by assigning it to a variable or directly invoking it.
This pattern helps create flexible and reusable code blocks.
Check function signatures carefully to avoid type mismatches.