20.Go语言-函数是一等公民

2022-09-04 11:22:28 浏览数 (1)

第 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)
    }()
}

0 人点赞