Go 语言匿名函数_回调函数

更新时间 2022-03-31 15:07:28

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

Go 语言 中,匿名函数 是没有名字的函数,只有函数体。匿名函数经常以变量 的形式被传递。

大部分场景下,匿名函数经常被使用于实现函数回调、闭包等。

一、定义一个匿名函数

匿名函数的定义格式如下:

func(参数列表) (返回参数列表) {
  函数体
}

从上面可以看出来,匿名函数的定义格式其实就是没有函数名的普通函数定义格式。

1.1 定义后立即调用匿名函数

可以定义完匿名函数后,立即调用它,例如:

package main

import "fmt"

func main()  {
	func(name string) {
		fmt.Printf("hello, %s", name)
	}("犬小哈教程")
}

上面的代码,我们注意到函数后面立刻跟上传入参数,表示对匿名函数的调用。

代码输出如下:

hello, 犬小哈教程

1.2 将匿名函数赋值给变量

匿名函数可以赋值给变量,示例如下:

package main

import "fmt"

func main()  {
	// 将匿名函数赋值给变量 function
	function := func(name string) {
		fmt.Printf("hello, %s", name)
	}
	
	// 使用变量 function 调用函数
	function("犬小哈教程")
}

代码输出如下:

hello, 犬小哈教程

二、匿名函数用作回调函数

下面演示一段匿名函数充当回调函数的示例:

package main

import "fmt"

func visit(list []string, f func(string))  {
	// 遍历切片中的元素,并将值作为参数传给回调函数
	for _, value := range list {
		// 调用回调函数
		f(value)
	}
}

func main()  {
	// 定义一个切片
	list := []string{"犬小哈", "quanxiaoha.com"}

	// 使用匿名函数打印切片内容
	visit(list, func(value string) {
		fmt.Println(value)
	})
}

代码输出如下:

犬小哈
quanxiaoha.com

图示:

go语言回调函数代码示例go语言回调函数代码示例