第 20 章 头等函数

Go 语言拥有 头等函数(First-class Function) ,头等函数是指函数可以被当作变量一样使用,即函数可以被当作参数传递给其他函数,可以作为另一个函数的返回值,还可以被赋值给一个变量。

20.1 把函数赋值给变量

下面是一个把函数赋值给变量的例子,该函数没有名称,调用该函数的唯一方法就是使用赋值后的变量。

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func main() {
bookFunc := func() {
fmt.Println("《Go语言极简一本通》")
}
bookFunc()
fmt.Printf("bookFunc 的类型是 %T\n", bookFunc)
}

运行该程序输出如下:

1
2
《Go语言极简一本通》
bookFunc 的类型是 func()

20.2 传递一个函数作为参数

我们把 接收一个或多个函数作为参数 或者 返回值也是一个函数 的函数称为 高阶函数(Hiher-order Function)

下面的是把函数作为参数,并传递给其他函数的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 返回一个函数

下面的是函数返回一个函数的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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) 是匿名函数的一个特例。当一个匿名函数所访问的变量定义在函数体的外部时,就称这样的匿名函数为闭包。

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
x := 100
func() {
fmt.Println(x)
}()
}

如何学习Go语言微服务,快速步入架构师

从0到Go语言微服务架构师-海报 从0到Go语言微服务架构师
添加微信 公众号更多内容
wechat gzh