I have taken reference from function pointer in c language and callback function from JavaScript
In c language we use function pointer to pass function as an argument to another function as function pointer act as a variable.
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int calc(int (*fp)(int, int), int a, int b) {
return (*fp)(a, b);
}
int main() {
printf("%d\n", calc(add, 5, 6)); // 11
printf("%d\n", calc(sub, 9, 6)); // 3
return 0;
}
In JavaScript we can directly pass function as an argument
/* JavaScript Code Snippet */
var foo = function() {
alert("Foo");
}
function bar(f) {
f();
}
bar(foo)
I tried to replicate same scenario in Go
Here the user of cacl function doesn't need to worry about what is inside the add function
The user just need to know what functionality he/she needs to perform based on which he/she pass function name as argument to calc function
package main
import "fmt"
func add(x, y int) int {
return x + y;
}
func sub(x, y int) int {
return x - y;
}
func calc(fp func(int, int) int, x, y int) {
fmt.Println(fp(x, y));
}
func main() {
calc(add, 5, 6); // 11
calc(sub, 7, 4); // 3
calc(func(x, y int) int{
return x * y;
}, 5, 3); //this will print 15
}
Also if required we can create anonymous function like we created for multiplication
And if you want to use pointer to function directly then following snippet would work
package main
import "fmt"
func greet(){
fmt.Println("Hello World")
}
func main() {
fptr := greet
fmt.Println(fptr) //this will print address
fptr()
}
I hope this will help.