# 匿名函数与闭包

URL: https://caijiao.org/go/01-go-basic/16-anonymous-closure
Source: docs/go/01-go-basic/16-anonymous-closure.md
Description: 本节讲解 Go 语言中的匿名函数与闭包，展示如何使用函数作为一等公民实现灵活编程。

匿名函数没有名字，可以直接定义和调用，也可以作为变量或参数传递。闭包是匿名函数捕获并持有外部变量的特性。

## 1. 匿名函数定义与调用

```go
func() {
    fmt.Println("Hello, 匿名函数")
}()
````

将匿名函数赋值给变量：

```go
f := func(name string) {
    fmt.Println("Hello,", name)
}
f("Go")
```

## 2. 闭包示例

闭包可以访问和修改外部变量：

```go
func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

pos := adder()
fmt.Println(pos(1))  // 输出：1
fmt.Println(pos(2))  // 输出：3
fmt.Println(pos(3))  // 输出：6
```

每次调用闭包都会累积 `sum`，体现了状态的保持。

---

匿名函数和闭包是 Go 函数式编程的重要工具，提升代码灵活性和表达力。
