Go语言基础教程:闭包

在这篇教程中,我们将通过一段简单的 Go 语言代码来理解闭包的概念。闭包是编程中非常强大且常用的工具,尤其适合实现像计数器这样的逻辑。我们将逐行讲解代码,并理解如何在 Go 中利用闭包来保存函数状态。

Go 复制代码
package main

import "fmt"

// intSeq 返回一个函数,该函数每次调用时会增加一个整数
func intSeq() func() int {
    i := 0  // 初始化一个局部变量 i
    return func() int {  // 返回一个匿名函数
        i++  // 闭包中每次调用这个函数都会将 i 增加 1
        return i
    }
}

func main() {

    // 创建一个新的计数器函数,并将其赋值给 nextInt
    nextInt := intSeq()

    // 调用 nextInt 函数多次,查看 i 的累加效果
    fmt.Println(nextInt()) // 输出: 1
    fmt.Println(nextInt()) // 输出: 2
    fmt.Println(nextInt()) // 输出: 3

    // 创建一个新的计数器,观察其与 nextInt 是否独立
    newInts := intSeq()
    fmt.Println(newInts()) // 输出: 1
}
相关推荐
李妍.3 小时前
02Numpy基础(上)
开发语言·python
TheBestRucy3 小时前
Python 九阳神功之贰:面向对象(下)
开发语言·python
AI_小站4 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
笃行3505 小时前
向量数据库单独建一套,这笔账划不划算
后端
felixking5 小时前
C++20 协程
开发语言·c++·协程
weixin_431600445 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
Rain的Java大神之路6 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
Zane1994126 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言
Lost of 程序猿6 小时前
AOP 实战:面向切面编程从理论到落地
后端·asp.net·aop·面向切片变成
Lost of 程序猿7 小时前
ASP.NET Core 认证授权实战:从 JWT 到 Policy,设计一套企业级 RBAC 权限系统
后端·asp.net