前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20.Go语言-函数是一等公民

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

原创
作者头像
面向加薪学习
发布2022-09-04 11:22:28
2530
发布2022-09-04 11:22:28
举报
文章被收录于专栏:面向加薪学习面向加薪学习

第 20 章 头等函数

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

20.1 把函数赋值给变量

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

代码语言:go
复制
package main

import "fmt"

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 20 章 头等函数
    • 20.1 把函数赋值给变量
      • 20.2 传递一个函数作为参数
        • 20.3 返回一个函数
          • 20.4 闭包
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档