golang支持函数类型,定义一个函数类型以后,且实现该函数类型的成员函数。具有相同形参和返回值类型的函数可以转换为该函数类型。然后通过在成员函数中调用该函数,可以实现装饰者模式,封装外部函数或者修改函数的返回值以达到外部预期,比如更改返回值字段为统一的字段名等。
package main
import "fmt"
type MyFunc func(name string) string
func (f MyFunc)Show(name string) {
fmt.Println("Hello I am " + f(name))
}
func ChineseName(name string) string {
return name
}
func EnglishName(name string) string {
return name
}
func main() {
f := MyFunc(ChineseName)
f.Show("小明")
f = MyFunc(EnglishName)
f.Show("xiaoming")
}
函数类型用于代表有共同形参和返回值类型的函数。