Function as a Field in Golang Structure


Functions are a first-class citizen in Go programming language, which means they can be treated as values and used as arguments or return values from other functions. This also extends to structs, where you can include a function as a field in a struct. In this article, we'll explore how to include a function as a field in a Golang structure and how to use it.

Defining a Function as a Field in a Golang Structure

To define a function as a field in a Golang structure, we first need to declare the type of the function using the type keyword. For example, let's define a function that takes two integers and returns their sum −

Example

package main

type addFunc func(int, int) int

func add(a, b int) int {
   return a + b
}

func main() {
   var af addFunc = add
   result := af(1, 2)
   println(result)
}

Output

3

In this example, we have defined a type addFunc which represents a function that takes two integers as arguments and returns an integer. We have also defined a function add that satisfies this type by taking two integers and returning their sum.

Next, we can include this function as a field in a Golang structure. For example −

Example

package main

type addFunc func(int, int) int

func add(a, b int) int {
   return a + b
}

type Calculator struct {
   Add addFunc
}

func main() {
   var c Calculator
   c.Add = add
   result := c.Add(1, 2)
   println(result)
}

Output

3

In this example, we have defined a Calculator struct with a field Add of type addFunc. This means that any function that satisfies the addFunc type can be assigned to the Add field of a Calculator instance.

Using a Function Field in a Golang Structure

Once we have defined a function as a field in a Golang structure, we can use it just like any other field. For example, we can create an instance of Calculator and assign the Add field to the add function we defined earlier −

Example

package main

import "fmt"

type addFunc func(int, int) int

func add(a, b int) int {
   return a + b
}

type Calculator struct {
   Add addFunc
}

func main() {
   calculator := Calculator{Add: add}

   sum := calculator.Add(2, 3)
   fmt.Println(sum)
}

Output

5

In this example, we have created an instance of Calculator and assigned the Add field to the add function we defined earlier. We can then call the Add function on the calculator instance with the arguments 2 and 3, which will return the sum of 2 and 3.

Benefits of Using Function Fields in Golang Structures

Using functions as fields in Golang structures can make your code more modular and flexible. By including functions as fields in structures, you can encapsulate behavior and provide a consistent interface for interacting with that behavior. This can make your code easier to understand and maintain, especially as your codebase grows in size and complexity.

Another benefit of using function fields in Golang structures is that it allows you to use higher-order functions, which are functions that take other functions as arguments or return functions as values. This can be particularly useful when implementing functional programming patterns in Go, such as map-reduce or filter.

Conclusion

In this article, we've explored how to define and use functions as fields in Golang structures. By including functions as fields in structures, you can encapsulate behavior and provide a consistent interface for interacting with that behavior, making your code more modular and flexible. Additionally, using function fields in Golang structures allows you to use higher-order functions, which can be particularly useful when implementing functional programming patterns in Go.

Updated on: 18-Apr-2023

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements