Go语言匿名函数无需命名,可立即执行、赋值调用或作为参数传递,支持闭包,适用于一次性逻辑、作用域隔离及高阶函数场景。
Go语言中的匿名函数是定义临时逻辑的简洁方式,无需提前声明函数名,适合一次性使用、闭包场景或作为参数传递。
直接定义并立即执行
匿名函数可以定义后立刻调用,常用于初始化、局部
作用域
隔离或避免污染命名空间。
语法:在函数字面量后加括号
注意:函数字面量需用括号包裹,否则编译报错
示例:
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
func() { fmt.Println("Hello, world!") }()
赋值给变量后多次调用
把匿名函数赋给一个变量(通常是
类型),后续可像普通函数一样调用。
立即学习
“
go语言免费学习笔记(深入)
”;
变量类型需与函数签名匹配,包括参数和返回值
适合封装简单、复用次数少但逻辑稍复杂的操作
示例:
add := func(a, b int) int { return a + b }result := add(3, 5) // result = 8
作为参数传给高阶函数
Go
标准库
(如
、
)和自定义函数常接受函数类型参数,匿名函数是最自然的传入方式。
避免为简单逻辑单独写命名函数,代码更紧凑
可捕获外层变量,形成闭包,实现状态感知逻辑
示例(按字符串长度排序):
names := []string{"Alice", "Bob", "Charlie"}sort.Slice(names, func(i, j int) bool {return len(names[i]) })
利用闭包捕获外部变量
匿名函数能访问并记住其定义时所在作用域的变量,这是实现计数器、配置工厂、延迟计算等模式的关键。
捕获的是变量的引用,不是值快照(除非显式复制)
多个匿名函数共享同一组外层变量时需注意并发安全
示例(带初始值的累加器):
newCounter := func(start int) func() int {count := startreturn func() int {count++return count}}counter := newCounter(10)fmt.Println(counter()) // 11fmt.Println(counter()) // 12
()funcsort.Slicestrings.FieldsFunc