1. func Add(a,b int) (result int) {
    2. return a + b
    3. }
    4. //可以通过type关键字给函数类型起名
    5. type FuncType func(int,int) int
    6. //使用
    7. func main(){
    8. //声明一个函数类型的变量
    9. var (
    10. foo FuncType
    11. result int
    12. )
    13. foo = Add
    14. result = foo(10,20) //等价于Add(10,20)
    15. fmt.Println("result = ",result)
    16. }

    那么由此可知,在go语言里,函数也可以被命名为函数类型

    函数类型配合回调函数就能实现多态的功能

    exp:

    //下面是实现一个相加的回调函数

    1. //命名一个函数类型
    2. type FuncType func(int,int) int
    3. //创建一个可以实现"加、减、乘、除"的函数
    4. func Calc(a,b int,foo FuncType) (result int) {
    5. //如果成功执行此函数,打印一下
    6. fmt.Println("Calc")
    7. result = foo(a,b) //如果调用此函数,foo就相当于传入的那个函数了
    8. return
    9. }
    10. func Add(a,b int) int{
    11. //实现a+b
    12. return a+b
    13. }
    14. func main(){
    15. result := Calc(1,1,Add)//此时Add函数就被作为参数传给Calc,内部就会把Add转为foo
    16. fmt.Println("result = ",result)
    17. }
    18. //打印结果
    19. result = 2