匿名函数与闭包
func literal、闭包捕获变量、立即执行函数、回调
匿名函数与闭包
Go 支持匿名函数和闭包——函数可以捕获外部变量,形成独立的状态环境。
学完本章你将: 掌握 func literal、闭包捕获、回调、立即执行。
匿名函数基础
go
package main
import "fmt"
func main() {
// 赋值给变量
add := func(a, b int) int {
return a + b
}
fmt.Println(add(3, 5)) // 8
// 立即执行
result := func(x int) int {
return x * x
}(5) // ← 立即传入参数
fmt.Println(result) // 25
}
闭包 —— 捕获外部变量
go
// 计数器——每次调用返回下一个数
func counter() func() int {
count := 0
return func() int {
count++ // 捕获了外层的 count
return count
}
}
func main() {
next := counter()
fmt.Println(next()) // 1
fmt.Println(next()) // 2
fmt.Println(next()) // 3
// 另一个独立的计数器
next2 := counter()
fmt.Println(next2()) // 1
}
闭包作为回调
go
func forEach(slice []int, fn func(int)) {
for _, v := range slice {
fn(v)
}
}
func main() {
nums := []int{1, 2, 3, 4, 5}
forEach(nums, func(n int) {
fmt.Print(n*2, " ") // 2 4 6 8 10
})
}