Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Anonymous Functions in Go

Introduction

An anonymous function is a function that is defined without a name. These functions are often used for short-term tasks or as arguments to higher-order functions. In Go, anonymous functions are commonly used for concurrency and as callbacks.

Defining Anonymous Functions

Anonymous functions are defined using the func keyword, followed by the parameter list, the function body, and optionally, the return type. Here’s a basic example:

package main

import "fmt"

func main() {
    // Define an anonymous function and call it immediately
    func() {
        fmt.Println("Hello, World!")
    }()
}
                

In this example, the anonymous function prints "Hello, World!" and is called immediately after it is defined.

Assigning Anonymous Functions to Variables

Anonymous functions can be assigned to variables for later use. This can be very useful for creating flexible and reusable code. Here's how you can do it:

package main

import "fmt"

func main() {
    // Assign the anonymous function to a variable
    greet := func(name string) {
        fmt.Printf("Hello, %s!\n", name)
    }

    // Call the anonymous function
    greet("Alice")
    greet("Bob")
}
                

In this example, the anonymous function takes a string parameter name and prints a personalized greeting.

Anonymous Functions as Arguments

Anonymous functions can be passed as arguments to other functions. This is particularly useful for callback functions or when working with higher-order functions.

package main

import "fmt"

// Function that takes another function as an argument
func performOperation(x int, y int, operation func(int, int) int) int {
    return operation(x, y)
}

func main() {
    // Define an anonymous function for addition
    add := func(a int, b int) int {
        return a + b
    }

    // Use the anonymous function as an argument
    result := performOperation(5, 3, add)
    fmt.Println("Result:", result)
}
                

In this example, the performOperation function takes two integers and an anonymous function as arguments. The anonymous function performs the addition operation.

Anonymous Functions with Go Routines

Anonymous functions are often used in conjunction with Go routines for concurrent programming. Here’s an example:

package main

import (
    "fmt"
    "time"
)

func main() {
    // Start a Go routine with an anonymous function
    go func() {
        time.Sleep(2 * time.Second)
        fmt.Println("Finished!")
    }()

    // Wait for the Go routine to complete
    time.Sleep(3 * time.Second)
}
                

In this example, an anonymous function is used to create a concurrent task that waits for 2 seconds before printing "Finished!". The main function waits for 3 seconds to ensure that the Go routine has enough time to complete.

Closures

Anonymous functions can also form closures. A closure is a function that captures the variables from its surrounding scope. This can be very powerful for maintaining state across multiple function calls.

package main

import "fmt"

func main() {
    // Create a closure that captures the variable x
    x := 0
    increment := func() int {
        x++
        return x
    }

    // Call the closure multiple times
    fmt.Println(increment()) // 1
    fmt.Println(increment()) // 2
    fmt.Println(increment()) // 3
}
                

In this example, the anonymous function increment captures the variable x from its surrounding scope and maintains its state across multiple calls.