函数类型(function types)是一种很特殊的类型,它表示着所有拥有同样的入参类型和返回值类型的函数集合。 如下这一行代码,定义了一个名叫 Greeting 的函数类型 type Greeting func(name string) string
这种类型有两个特征: 只接收一个参数 ,并且该参数的类型为 string 返回值也只有一个参数,其类型为 string
一个函数只要满足这些特征,那么它就可以通过如下方式将该函数转换成 Greeting 类型的函数对象(也即 greet) func english(name string) string { return 'Hello, ' + name }
// 转换成 Greeting 类型的函数对象 greet := Greeting(english) // 或者 var greet Greeting = english
greet 做为 Greeting 类型的对象,也拥有 Greeting 类型的所有方法,比如下面的 say 方法 func (g Greeting) say(n string) { fmt.Println(g(n)) }
直接调用试试看,并不会报错 greet.say('World')
将上面的代码整合在一起 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
|