函数类型:

package main

import (
	"fmt"
)

func add(a, b int) int {
	return a + b
}

type FuncType func(int, int) int // 定义函数类型

func main() {

	var fTest FuncType

	fTest = add // 函数赋值给函数类型,只要参数和返回值类型都相同即可赋值,可用此方法来实现多态
	res := fTest(1, 1)
	fmt.Println(res)
}

多态:

package main

import "fmt"

// 定义类型
type FuncType func(int, int) int

func Calc(a, b int, f FuncType) (result int) {
	result = f(a, b)
	return
}

func add(a, b int) (result int) {
	return a + b
}

func minus(a, b int) (result int) {
	return a - b
}

func mult(a, b int) (result int) {
	return a * b
}

func main() {
	// 多态
	ret := Calc(10, 20, add)
	fmt.Println(ret)
	
	ret = Calc(10, 20, minus)
	fmt.Println(ret)
}