第 20 章 头等函数
Go 语言拥有 头等函数(First-class Function) ,头等函数是指函数可以被当作变量一样使用,即函数可以被当作参数传递给其他函数,可以作为另一个函数的返回值,还可以被赋值给一个变量。
20.1 把函数赋值给变量
下面是一个把函数赋值给变量的例子,该函数没有名称,调用该函数的唯一方法就是使用赋值后的变量。
代码语言:go复制package main
import "fmt"
func main() {
bookFunc := func() {
fmt.Println("《Go语言极简一本通》")
}
bookFunc()
fmt.Printf("bookFunc 的类型是 %Tn", bookFunc)
}
运行该程序输出如下:
代码语言:go复制《Go语言极简一本通》
bookFunc 的类型是 func()
20.2 传递一个函数作为参数
我们把 接收一个或多个函数作为参数 或者 返回值也是一个函数 的函数称为 高阶函数(Hiher-order Function) 。
下面的是把函数作为参数,并传递给其他函数的例子:
代码语言:go复制package main
import "fmt"
// printRes 接收一个函数参数
func printRes(show func(author, book string) string) {
fmt.Println(show("欢喜", "《Go语言极简一本通》"))
}
func main() {
// 创建匿名函数
f := func(x, y string) string {
return x y
}
// 把匿名函数作为参数传入另一个函数
printRes(f)
}
20.3 返回一个函数
下面的是函数返回一个函数的例子:
代码语言:go复制package main
import "fmt"
// show 返回一个函数
func show() func(author, book string) string {
return func(x, y string) string {
return x y
}
}
func main() {
// 变量获取返回的函数
s := show()
// 调用返回的函数
fmt.Println(s("欢喜", "《Go语言极简一本通》"))
}
20.4 闭包
闭包(Closure) 是匿名函数的一个特例。当一个匿名函数所访问的变量定义在函数体的外部时,就称这样的匿名函数为闭包。
代码语言:go复制package main
import "fmt"
func main() {
x := 100
func() {
fmt.Println(x)
}()
}