Go语言匿名函数详解
作者:会编程的土豆
本文系统讲解Go语言中匿名函数的定义、调用及其核心应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
匿名函数是没有名字的函数,可以像普通变量一样赋值、传参和调用。在 Go 中,匿名函数和闭包密切相关,是函数式编程的重要手段。
一、匿名函数定义与调用
最简单的匿名函数:
package main
import "fmt"
func main() {
// 定义并立即调用匿名函数
func() {
fmt.Println("Hello, Go!")
}()
// 定义匿名函数并赋值给变量
f := func(a, b int) int {
return a + b
}
fmt.Println(f(3, 5)) // 输出 8
}
说明:
- 匿名函数可以立即执行,也可以赋值给变量后多次调用。
- 匿名函数的类型由其参数和返回值确定,可以像普通函数一样传递和返回。
二、匿名函数作为闭包
匿名函数可以捕获外部变量,从而形成闭包:
func main() {
sum := 0
add := func(x int) int {
sum += x
return sum
}
fmt.Println(add(1)) // 1
fmt.Println(add(2)) // 3
fmt.Println(add(3)) // 6
}
说明:
- add 是匿名函数,捕获了外部的 sum 变量。
- 每次调用 add,闭包内的 sum 状态会被保留。
三、匿名函数作为参数
匿名函数常用于回调或高阶函数:
func callback(f func(int) int) {
fmt.Println(f(10))
}
func main() {
y := 5
callback(func(x int) int {
return x + y
}) // 输出 15
}
说明:
- 匿名函数直接作为 callback 参数传入。
- 可以访问外部作用域变量 y。
四、匿名函数作为返回值
匿名函数可以返回给调用方,常用于函数工厂或生成累加器:
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
f := adder()
fmt.Println(f(1)) // 1
fmt.Println(f(2)) // 3
fmt.Println(f(3)) // 6
}
说明:
- adder 返回一个匿名函数。
- 返回的函数可以保留和操作外部变量 sum,形成闭包。
五、匿名函数的应用场景
- 临时函数:只使用一次,不需要命名。
- 闭包:累加器、延迟计算、状态保持。
- 回调函数:事件处理、排序、过滤。
- 工厂函数:返回自定义功能函数。
六、总结
- 匿名函数就是没有名字的函数,可以赋值给变量、传递和返回。
- 匿名函数捕获外部变量就形成闭包,状态可以被保留。
- Go 语言中,匿名函数和闭包是函数式编程和高阶函数的核心工具。
到此这篇关于Go语言匿名函数详解的文章就介绍到这了,更多相关Go语言 匿名函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
