From e35eb9bf42ecfbeff0564df6de72552293ed69bb Mon Sep 17 00:00:00 2001 From: ychot7 <790730090@qq.com> Date: Sat, 12 Jun 2021 21:55:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=2024=20=E7=AB=A0=20=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=88=9D=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...hap-24-anonymous-functions-and-closures.md | 674 ++++++++++++++++++ .../imgs/24-anonymous.1b832ed1.jpg | Bin 0 -> 20942 bytes .../imgs/24-closure.2ecc8fdd.png | Bin 0 -> 35115 bytes 3 files changed, 674 insertions(+) create mode 100644 chap-24-anonymous-functions-and-closures/chap-24-anonymous-functions-and-closures.md create mode 100644 chap-24-anonymous-functions-and-closures/imgs/24-anonymous.1b832ed1.jpg create mode 100644 chap-24-anonymous-functions-and-closures/imgs/24-closure.2ecc8fdd.png diff --git a/chap-24-anonymous-functions-and-closures/chap-24-anonymous-functions-and-closures.md b/chap-24-anonymous-functions-and-closures/chap-24-anonymous-functions-and-closures.md new file mode 100644 index 0000000..667b3fc --- /dev/null +++ b/chap-24-anonymous-functions-and-closures/chap-24-anonymous-functions-and-closures.md @@ -0,0 +1,674 @@ +# 第 24 章: 匿名函数和闭包 + +![](imgs/24-anonymous.1b832ed1.jpg) + +## 1 你将在本章中学到什么? + +- 什么是匿名函数? + +- 如何创建匿名函数。 + +- 如何调用匿名函数。 + +- 什么是闭包? + +- 什么是函数类型? + +## 2 提及的重要概念 + +- 匿名函数 + +- 函数表达式 + +- 上下文 + +- 作用域 + +## 3 匿名函数 + +匿名函数与普通函数类似,只是匿名函数没有被显式命名 + +要创建匿名函数,我们需要使用 func 关键字: + +```go +// anonymous/anon/main.go +package main + +import "fmt" + +func main() { + // 创建一个匿名函数 + func() { + // 匿名函数体 + fmt.Println("I am anonymous function") + }() +} +``` + +这里我们通过语法 `func(){..}` 定义了一个没有名字的函数,并且通过 `()` 执行该函数 + +因此,要定义一个匿名函数并立即执行,可以通过以下语法: + +```go +func(){...}() +``` + +- 定义匿名函数: `func(){..}` + +- 定义并立即执行: `func(){..}()` + +让我们再举一个例子 + +```go +// anonymous/example-2/main.go +package main + +import ( + "fmt" + "reflect" +) + +func main() { + + /** + * 没有立即执行的匿名函数 + */ + myFunc := func() int { + fmt.Println("I am a func litteral") + return 42 + } + // 输出 : 什么也没有输出~ + // 该匿名函数没有被执行 + + fmt.Println(reflect.TypeOf(myFunc)) + // 输出 : func() int + + /** + * 立即执行的匿名函数 + */ + funcValue := func() int { + fmt.Println("I am a func literal invoked") + return 42 + + }() + // 输出 : I am a func literal invoked + // 该匿名函数被执行 + fmt.Println(reflect.TypeOf(funcValue)) + // 输出 : int + +} +``` + +重点概括: + +- 函数可以没有名称; + +- 我们可以将函数本身存储到变量中(不同于以往变量中存储值,这点比较麻烦)。 + +## 4 函数类型 + +我们可以通过函数签名定义类型。这是从 gin 模块 (https://github.com/gin-gonic/gin) 中获取的示例: + +```go +package gin + +//... + +type HandlerFunc func(*Context) + +//... +``` + +这是从标准库 http 包中获取的示例: + +```go +package http +// ... +type HandlerFunc func(ResponseWriter, *Request) + +//... +``` + +函数类型定义了函数的参数和返回值,当你定义一个函数变量,就可以创建一个该函数类型的变量。举个例子: + +```go +type Funky func(string) + +var f Funky +f = func(s string){ + // my function defined + log.Printf("Funky %s",s) +} +f("Groovy") +``` + +- 我们定义了一个新的类型 `Funky` 。 +`Funky`类型表示参数为字符串且没有返回值的所有函数。`(func(string))` + +- 我们创建一个 `Funky` 类型的变量 `f` 。 + +- 然后我们为变量 `f` 赋值一个匿名函数。 + +- 最后,我们执行 `f("Groovy")` 。 + +## 5 函数是 “一等公民” + +在一些编程语言中,函数作为 “一等公民”, 允许他们: + +- 作为参数 + +- 作为返回值 + +- 赋值给变量 + +Go语言中函数被认为是 “一等公民”, 这意味着: + +- 函数可以作为参数传递给其他函数 + +- 函数可以作为返回值 + +- 函数可以赋值给变量 + +## 6 闭包 + +定义到一个函数中的匿名函数,可以使用该函数作用域下的变量,即使该变量没有在匿名函数作用域下。 + +匿名函数可以保留对上下文的引用,当函数引用未在其作用域内的变量时,就会形成闭包。 + +### 6.1 示例 + +这是一个闭包的例子: + +```go +// anonymous/first-closure/main.go +package main + +import "fmt" + +func printer() func() { + k := 1 + return func() { + fmt.Printf("Print n. %d\n", k) + k++ + } +} + +func main() { + + p := printer() + p() + // Print n. 1 + p() + // Print n. 2 + p() + // Print n. 3 +} +``` + +我们有一个 `printer` 函数,该方法的签名是 `printer() func()`, 这个签名意味着这个函数将返回一个函数, +被返回的这个函数没有返回值。 + +我们可以使用签名 `func() int` 做为返回值,这意味着我们返回的函数将会返回一个整数。 + +让我们进入函数声明。首先,定义了一个初始化值为 1 的变量。然后返回一个匿名函数,该匿名函数 +输出 `"Print n. %d\n"`, `%d` 的值为 `k` 。 + +- k为外部函数中定义的变量。 + +- 我们返回的新的匿名函数中,使用了外部变量k。 + +因此我们创建了一个闭包。 + +- 在 `main` 函数中,我们将 `printer` 函数的返回值(一个函数)赋值给 `p` 。 + +- `p` 是一个函数,我们只需在末尾添加括号即可执行这个被返回的函数: + +```go +p() // 执行 p 这个闭包 +``` + +`p` 的类型是 `func()` 。 + +### 6.2 作用域 + +- 我们说这个匿名函数获取了他的上下文的变量。 + +- 该函数保存了它当前运行环境的变量。 +![内部和外部作用域](imgs/24-closure.2ecc8fdd.png) + +- 函数(或变量)的作用域是一个区域,我们可以在同一作用域内使用所有声明在该作用域内的变量(类型、常量)。 + +- 封闭函数定义了一个外部作用域。在我们的例子中,我们在 `printer` 函数的外部作用域定义变量 `k`, 然后在 +返回的函数作用域(内部作用域)中使用 `k` 。 + +- 我们在内部作用域使用了一个外部作用域声明的变量。 + +- 闭包存储了我们在外部作用域声明的变量的引用。 + +- 所以我们在多次执行闭包时,变量 `k` 的值会增加。因为闭包持有引用,每次执行,都会修改底层的值。 + +## 7 闭包的一些常见用例 + +### 7.1 函数参数 + +您可以将一个函数作为另一个函数的参数传递。在 `sort` 包(标准库的一部分)中,有几个函数接收函数作为参数的例子: + +```go +// sort package + +// 使用二进制搜索特定值的索引 +func Search(n int, f func(int) bool) int + +// 根据传入的函数参数 less 对切片进行排序 +func Slice(slice interface{}, less func(i, j int) bool) +``` + +在前边两个函数签名中,我们看到 `sort.Search` 和 `sort.Slice` 函数需要传入函数参数。该函数在内部用于执行排序工作。 + +让我们举个例子: + +```go +// anonymous/input-parameters/main.go +package main + +import ( + "fmt" + "sort" +) + +func main() { + scores := []int{10, 89, 76, 3, 20, 12} + // 升序排序 + sort.Slice(scores, func(i, j int) bool { return scores[i] < scores[j] }) + fmt.Println(scores) + // 输出 : [3 10 12 20 76 89] + + // 降序排序 + sort.Slice(scores, func(i, j int) bool { return scores[i] > scores[j] }) + fmt.Println(scores) + // 输出 : [89 76 20 12 10 3] +} +``` + +- 我们定义了一个整数切片 `scores`, 它代表了 6 场 “地鼠” 游戏(一种只有地鼠才会进行的运动)的获胜分数。 + +- `scores` 切片并没有进行排序,我们的目标是将 `scores` 按顺序进行排序。 + +- 我们使用函数 `sort.Slice` 。 + +- 它的函数签名需要传入一个切片和一个函数。 这个函数将决定按什么规则对切片进行排序。需要传入的函数需要两个整形参数,表示两个索引,且返回一个布尔值。 + +- 这里有一个闭包。传入的函数使用了没有声明在其作用域内的变量 `scores` 。 + +在第一个例子中,`less` 函数是: + +```go +func(i, j int) bool { return scores[i] < scores[j] } +``` + +如果下标 `i` 对应的值小于 `j` 对应的值,那么会将下标 `i` 对应的值排到 `j` 之前。 + +因此切片按升序排序: + +```go +[3 10 12 20 76 89] +``` + +在第二个例子中,`less` 函数是: + +```go +func(i, j int) bool { return scores[i] > scores[j] } +``` + +如果下标 `i` 对应的值大于 `j` 对应的值,那么会将下标 `i` 对应的值排到 `j` 之前。 + +因此是降序排序: + +```go +[89 76 20 12 10 3] +``` + +### 7.2 封装: `http.HandleFunc` + +我们可以使用闭包来封装其他函数 + +在解释技术之前,我们先来构建一个简单的 `Web` 服务器(如果您已经知道如何去做,可以跳过这一段) + +#### 7.2.1 网络服务器的基本设置 + +在下边代码块中,我们指定如果将请求发送到访问端点 `"/homepage"` 时将执行函数 `homepageHandler` 。 + +```go +// anonymous/wrappers/main.go + +func homepageHandler(writer http.ResponseWriter, request *http.Request) { + fmt.Fprintln(writer, "Welcome to my homepage") + fmt.Fprintln(writer, "I am max") +} +``` + +`homepageHandler` 函数使用了 `http.ResponseWriter` 和 `http.Request` 。 + +这是一个非常简单的 `Web` 服务器示例: + +```go +// anonymous/wrappers/main.go + +package main + +import ( + "fmt" + "net/http" +) + +func main() { + http.HandleFunc("/homepage", homepageHandler) + err := http.ListenAndServe(":3000", nil) + if err != nil { + log.Fatal(err) + } + +} +func homepageHandler(writer http.ResponseWriter, request *http.Request) { + fmt.Fprintln(writer, "Welcome to my homepage") + fmt.Fprintln(writer, "I am max") + +} +``` + +#### 7.2.2 封装技术 + +假如你的 `Web` 服务器有多个访问端点,并且需要跟踪每个端点的访问。 + +有一个不优雅的方法就是在每个处理程序中添加一个计数器。 + +另外,我们可以创建一个所有处理程序都可以使用的通用封装。该封装接收一个处理程序,且返回一个处理程序。 + +这样,我们可以使用以下语法: + +```go +http.HandleFunc("/homepage", trackVisits(homepageHandler)) +``` + +这样很优雅。我们可以在这个封装中进行访问跟踪,然后执行处理程序。下面是这个函数的实现: + +```go +func trackVisits(handler func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) { + return func(writer http.ResponseWriter, request *http.Request) { + // 跟踪端点访问 + fmt.Println("one visit !") + // 调用处理程序 + handler(writer, request) + } +} +``` + +- `trackVisits` 函数的参数和返回值都是 `handler` 类型。 + +- `trackVisits` 函数的返回值必须和 `http.HandleFunc` 具有相同的签名。 + +- 在函数体中,返回一个匿名函数。该匿名函数首先打印我们有一次访问,然后执行原来的处理程序。 + +这种强大的技术可以让我们在创建多个访问节点的同时,避免很多重复的代码: + +```go +http.HandleFunc("/homepage", trackVisits(homepageHandler)) +http.HandleFunc("/cv", trackVisits(cvHandler)) +http.HandleFunc("/projects", trackVisits(projectsHandler)) +``` + +是不是也可以定义其他类型的封装 +: +```go +http.HandleFunc("/projects", authenticate(trackVisits(projectsHandler))) +``` + +实现该封装: + +```go +func authenticate(handler func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) { + return func(writer http.ResponseWriter, request *http.Request) { + // 检查请求是否通过身份校验 + fmt.Println("authenticated !") + // 调用处理程序 + handler(writer, request) + } +} +``` + +### 7.3 函数的选项模式 + +戴夫·切尼 (Dave Cheney) 提出了这种模式。这是一种允许您改进库的 API 的模式。 + +通常,库函数提供多种“选项”。通过这种模式提供功能。 + +#### 7.3.1 + +举一个身份验证库的例子: + +```go +auth := authenticator.New("test", authenticator.UnverifiedEmailAllowed(), authenticator.WithCustomJwtDuration(time.Second)) + +if auth.IsValidJWT("invalid") { + log.Println("mmmm... maybe we should use another lib.") +} +``` + +- 我们调用 `authenticator.New` 初始化了一个新的身份验证器。 + +- 我们向函数传递一个字符串 `"test"` 和另外两个参数, + +```go +authenticator.UnverifiedEmailAllowed() + +authenticator.WithCustomJwtDuration(time.Second) +``` + +- 这两个参数是两个函数执行完返回的值。 + +这里选项是用函数设置的。 + +#### 7.3.2 内部实现 + +```go +// anonymous/functionalOptions/authenticator/authenticator.go +package authenticator + +import ( + "time" +) + +type options struct { + jwtDuration time.Duration + allowUnverifiedEmail bool + allowUnverifiedPhone bool +} + +type Option func(*options) + +func WithCustomJwtDuration(duration time.Duration) Option { + return func(options *options) { + options.jwtDuration = duration + } +} + +func UnverifiedEmailAllowed() Option { + return func(options *options) { + options.allowUnverifiedEmail = true + } +} + +func UnverifiedPhoneAllowed() Option { + return func(options *options) { + options.allowUnverifiedEmail = true + } +} + +type Authenticator struct { + name string + options options +} + +func New(name string, opts ...Option) *Authenticator { + options := options{ + jwtDuration: time.Hour, + } + for _, opt := range opts { + opt(&options) + } + return &Authenticator{name: name, options: options} +} + +func (a Authenticator) IsValidJWT(jwt string) bool { + return false +} + +``` +- 首先定义了一个结构体 `options` 。 + + - 这个结构体会记录设置过的选项 + + - 每一个选项都是一个不对外暴露的字段 + +- 创建了一个函数类型 `type Option func(*options)` 。 + +- 对于每个选项,我们会对外暴露一个函数,该函数返回一个 `Option` + + - 对于“允许未经验证的电子邮件”选项,我们有以下功能: + + ```go + func UnverifiedEmailAllowed() Option { + return func(options *options) { + options.allowUnverifiedEmail = true + } + } + ``` + +`New` 函数的第二个参数 `opts ...Option` + +- 这是一个可变长参数,你可以传入 0 个或多个 `Option` 类型的参数 + +- `New` 的内部实现 + + - 首先,设置默认值。 + + - 然后遍历 `opts`(`Option` 类型的切片)。 + + - 在每一次遍历中,都会得到一个设置选项的函数。 + + - 执行函数 `opt(&options)` 。 + +## 8 自我测试 + +### 问题 + +1. 判断对错:不能将匿名函数赋值给变量。 + +2. 判断对错:不能在函数内定义命名函数。 + +3. 判断对错:不能在函数内定义匿名函数。 + +4. 填空:“____可以用____类型声明。” + +5. 说出一个常见的闭包用例。 + +6. 匿名函数可以使用作用域外定义的变量吗? + +### 答案 + +1. 判断对错:不能将匿名函数赋值给变量。 + + 1. 错。 + + 2. 可以将匿名函数赋值给变量。 + + ```go + f35 := func()uint{ return 35} + ``` + +2. 判断对错:不能在函数内定义命名函数。 + + 1. 对。 + + 2. 以下代码将无法编译: + + ```go + func main(){ + func insideFunction(){ + + } + } + + func main(){ + f := func(s string){ + func insideFunction(){ + + } + test() + } + } + ``` + +3. 判断对错:不能在函数内定义匿名函数。 + + 1. 错。 + +4. 填空:“____可以用____类型声明。” + + 1. 匿名函数可以用 `func` 关键字类型声明。 + +5. 说出一个常见的闭包用例。 + + 1. 封装处理程序。 + +6. 匿名函数可以使用作用域外定义的变量吗? + + 1. 是的 + + 2. 匿名函数可以使用在其封闭函数中定义的元素。 + +## 9 关键要点 +- 请使用 `func` 关键字定义匿名函数。 + + ```go + func(){ fmt.Println("my anonymous function")} + ``` + +- 匿名函数可以赋值给变量。 + + ```go + myFunc := func(){ fmt.Println("my anonymous function")} + ``` + +- 要定义并立即执行匿名函数,需要在函数末尾加上括号: + + ```go + func(){ fmt.Println("my anonymous function")}() + ``` + + - 定义并执行这个匿名函数。 + +- 函数类型可以定义具有相同参数和返回值的所有函数。 + + - 函数类型的零值为 `nil` 。 + + - 例如: + ```go + type Option func(*options) + ``` + +- 函数是“一等公民”。 + + - 它们可以作为参数传递。 + + - 它们可以作为结果返回。 + + - 它们可以分配给一个变量。 + +- 匿名函数可以使用上下文定义的元素(变量、类型、常量)。 + + - 我们说匿名函数保存了其上下文环境。 + +## 参考文献 + +- [strachey2000fundamental] 斯特拉奇,克里斯托弗。2000. “编程语言的基本概念”。高阶和​​符号计算 13 (1): 11–49。 \ No newline at end of file diff --git a/chap-24-anonymous-functions-and-closures/imgs/24-anonymous.1b832ed1.jpg b/chap-24-anonymous-functions-and-closures/imgs/24-anonymous.1b832ed1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..670b7e372270463d068525a142378c8c65844a21 GIT binary patch literal 20942 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 TF$2L0^L_(aZ@|SK`KR}P;HQ|z literal 0 HcmV?d00001 diff --git a/chap-24-anonymous-functions-and-closures/imgs/24-closure.2ecc8fdd.png b/chap-24-anonymous-functions-and-closures/imgs/24-closure.2ecc8fdd.png new file mode 100644 index 0000000000000000000000000000000000000000..cd74500360ec02a0e93b927b275e13d42437dca4 GIT binary patch literal 35115 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�v#P;+e3&M#mnjcA&QDj{f(0BHKy&uH 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 literal 0 HcmV?d00001