Z
ZHANK
编程在线教程Go 教程匿名函数与闭包
函数

匿名函数与闭包

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
    })
}