func Add(a,b int) (result int) {
return a + b
}
//可以通过type关键字给函数类型起名
type FuncType func(int,int) int
//使用
func main(){
//声明一个函数类型的变量
var (
foo FuncType
result int
)
foo = Add
result = foo(10,20) //等价于Add(10,20)
fmt.Println("result = ",result)
}
那么由此可知,在go语言里,函数也可以被命名为函数类型
函数类型配合回调函数就能实现多态的功能
exp:
//下面是实现一个相加的回调函数
//命名一个函数类型
type FuncType func(int,int) int
//创建一个可以实现"加、减、乘、除"的函数
func Calc(a,b int,foo FuncType) (result int) {
//如果成功执行此函数,打印一下
fmt.Println("Calc")
result = foo(a,b) //如果调用此函数,foo就相当于传入的那个函数了
return
}
func Add(a,b int) int{
//实现a+b
return a+b
}
func main(){
result := Calc(1,1,Add)//此时Add函数就被作为参数传给Calc,内部就会把Add转为foo
fmt.Println("result = ",result)
}
//打印结果
result = 2