BLOG

关于 Go 闭包的基础学习笔记,记录闭包的定义、状态保持和调用方式。

Go Note:闭包学习

1. 什么是闭包

闭包是指一个函数能够访问其外层作用域中的变量,即使这个函数在外部作用域之外被调用,也仍然可以保持这些变量的状态。

package main

import "fmt"

func B() func(n int) int {
    i := 0
    return func(n int) int {
        fmt.Println("接收了:", n)
        i++
        fmt.Println("被调用:", i)
        return i
    }
}

func main() {
    f := B()
    fmt.Println(f(1))
    fmt.Println(f(2))
    fmt.Println(f(3))
}

2. 这个示例的重点

B() 返回的是一个函数,而不是一个普通值。这个返回函数捕获了局部变量 i。因此:

3. 运行结果

接收了: 1
被调用: 1
1
接收了: 2
被调用: 2
2
接收了: 3
被调用: 3
3

4. 学习体会

闭包最常见的用法是:

它的价值在于,让函数在调用时保留上下文,而不需要把状态显式地作为参数传来传去。

5. 结论

闭包不是复杂的语法,而是“函数 + 外部状态”的组合方式。它让代码更灵活,也更容易表达状态依赖的逻辑。



Author: NUPIGM

Date: 2026-09-20