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
}
相关推荐
我命由我123456 分钟前
JavaScript WebGL - WebGL 引入(获取绘图上下文、获取最大支持纹理尺寸)
开发语言·前端·javascript·学习·ecmascript·学习方法·webgl
凌冰_10 分钟前
Thymeleaf 访问域对象
java·开发语言
想唱rap14 分钟前
哈希(C++)
服务器·开发语言·c++·算法·哈希算法
2501_9307077815 分钟前
使用C#代码向 Word 文档添加文档属性
开发语言·c#·word
加成BUFF16 分钟前
Qt开发核心工具:CMake与qmake全面解析
开发语言·qt·cmake·qmake
武子康21 分钟前
大数据-193 Apache Tez 实战:Hive on Tez 安装配置、DAG原理与常见坑
大数据·后端·apache
青石路21 分钟前
用了MySQL的INSERT ON DUPLICATE KEY UPDATE,怎么还报唯一索引冲突错误
后端·sql·mysql
野生风长21 分钟前
从零开始的C语言:文件操作与数据管理(下)(fseek,ftell,rewind,文件的编译和链接)
android·java·c语言·开发语言·visual studio
阿蒙Amon22 分钟前
C#每日面试题-属性和字段的区别
开发语言·c#
2345VOR24 分钟前
【ESP32C3接入2025年冬火山大模型教程】
开发语言·数据库·豆包·火山