4.2 学习 Go 函数:函数类型是什么? ================================== .. image:: http://image.iswbm.com/20200607145423.png 函数类型(\ `function types `__\ )是一种很特殊的类型,它表示着所有拥有同样的入参类型和返回值类型的函数集合。 如下这一行代码,定义了一个名叫 ``Greeting`` 的函数类型 .. code:: go type Greeting func(name string) string 这种类型有两个特征: 1. 只接收一个参数 ,并且该参数的类型为 string 2. 返回值也只有一个参数,其类型为 string 一个函数只要满足这些特征,那么它就可以通过如下方式将该函数转换成 Greeting 类型的函数对象(也即 greet) .. code:: go func english(name string) string { return "Hello, " + name } // 转换成 Greeting 类型的函数对象 greet := Greeting(english) // 或者 var greet Greeting = english greet 做为 Greeting 类型的对象,也拥有 Greeting 类型的所有方法,比如下面的 say 方法 .. code:: go func (g Greeting) say(n string) { fmt.Println(g(n)) } 直接调用试试看,并不会报错 .. code:: go greet.say("World") 将上面的代码整合在一起 .. code:: go package main import "fmt" // Greeting function types type Greeting func(name string) string func (g Greeting) say(n string) { fmt.Println(g(n)) } func english(name string) string { return "Hello, " + name } func main() { greet := Greeting(english) greet.say("World") } // output: Hello, World