You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Go语言闭包示例输出12而非11?

为什么这段Go代码输出12而不是11?

先看你贴的代码:

func fA() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}
func main() {
   fB := fA()
   fmt.Print(fB())
   fmt.Print(fB())
}

问题出在闭包的变量捕获机制上:

  • 调用fA()时,会创建变量i并初始化为0,然后返回一个匿名函数(也就是闭包)。这个闭包不会复制i的值,而是直接和i的内存地址绑定,共享同一个变量。
  • 第一次调用fB():闭包里的i自增(从0变成1),返回1,fmt.Print输出1。
  • 第二次调用fB():闭包还是用同一个i,再次自增(从1变成2),返回2,fmt.Print输出2。

两次输出连在一起就是12,而不是你预期的11——因为两次调用用的是同一个i,不是每次调用都重新初始化i。

内容的提问来源于stack exchange,提问作者Zoya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:10:38