How Can I Pass Functions as Arguments in Go?
Dec 04, 2024 pm 12:12 PMPassing Functions as Arguments: A Metaprogramming Approach in Golang
As we know, Golang functions are first-class values, eliminating the need for metaprogramming tricks common in dynamic languages. To pass a function as an argument to another function, we can simply utilize Golang's inherent support for function values. Here's an example:
package main import "fmt" func someFunction1(a, b int) int { return a + b } func someFunction2(a, b int) int { return a - b } func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) } func main() { fmt.Println(someOtherFunction(111, 12, someFunction1)) fmt.Println(someOtherFunction(111, 12, someFunction2)) }
Running this program will produce the following output:
123 99
Now, let's consider a scenario where the selection of the function depends on a run-time-only known value. To handle this, we can create a map that associates function names with their respective function pointers:
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
In this way, we can pass a function as an argument by its name, dynamically selecting the desired function at runtime.
The above is the detailed content of How Can I Pass Functions as Arguments in Go?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Go language pack import: What is the difference between underscore and without underscore?

How do I write mock objects and stubs for testing in Go?

How to implement short-term information transfer between pages in the Beego framework?

How can I define custom type constraints for generics in Go?

How can I use tracing tools to understand the execution flow of my Go applications?

How can I use linters and static analysis tools to improve the quality and maintainability of my Go code?

How to write files in Go language conveniently?

How to convert MySQL query result List into a custom structure slice in Go language?
