Today, I played with functions as objects in the Go programming language. If functions are first class citizens in Go then it must be possible to store them in fields of a struct, pass them as arguments to other functions and use them as return values of other functions.
So I visited play.golang.org for putting together a simple program that demonstrates this.
package main
import "fmt"
func CallWith(f func(string), who string) {
f(who)
}
type FunctionHolder struct {
Function func(string)
}
func main() {
holder := FunctionHolder{ func(who string) { fmt.Println("Hello,", who) }}
CallWith(holder.Function,"ernest")
}
- The CallWith function takes a one string parameter function f and a string parameter who. The body of the CallWith function evaluates the function parameter with the string parameter.
- The FunctionHolder is a struct type with a field called Function which must be a function with a string parameter.
- In the main function, a FunctionHolder is created initializing the Function field with a function that prints an Hello message.
- Next in the main function, the CallWith function is called with the Function value of the holder and a string value.
On play.golang.org can run this program yourself