Bruce Blog Bruce Blog
首页
  • CentOS
  • Ubuntu-Debian
  • 系统网络
  • 系统辅助工具
  • MySQL
  • Redis
  • Mongodb
  • Docker基础
  • Container基础
  • Kubernetes

    • Kubernetes基础
    • Kubernetes辅助
  • Container-Network
  • Jenkins
  • Gitlab
  • ArgoCD
  • Ansible
  • Terraform
  • AWS
  • MQ
  • NGINX
  • JumpServer
  • 基础
  • 函数模块
  • 框架
  • 基础

    • Golang环境
    • 语法
    • 数据类型与运算符
    • 分支语句
    • 循环语句
    • 数组
    • 切片
    • Map
    • String
    • 函数
    • 包的管理
    • 指针
    • 结构体
    • Go语言中的OOP
    • 方法和接口
    • 错误处理
  • Go进阶

    • Go进阶
  • Go框架

    • Go框架
  • Golang辅助

    • Golang辅助
  • CSS
  • HTML
  • JavaScript
  • 前端辅助
  • 常用命令
  • 性能监控工具
  • Windows下Docker使用
  • 日常学习
  • 其他导航

Bruce Tao

运维界的该溜子
首页
  • CentOS
  • Ubuntu-Debian
  • 系统网络
  • 系统辅助工具
  • MySQL
  • Redis
  • Mongodb
  • Docker基础
  • Container基础
  • Kubernetes

    • Kubernetes基础
    • Kubernetes辅助
  • Container-Network
  • Jenkins
  • Gitlab
  • ArgoCD
  • Ansible
  • Terraform
  • AWS
  • MQ
  • NGINX
  • JumpServer
  • 基础
  • 函数模块
  • 框架
  • 基础

    • Golang环境
    • 语法
    • 数据类型与运算符
    • 分支语句
    • 循环语句
    • 数组
    • 切片
    • Map
    • String
    • 函数
    • 包的管理
    • 指针
    • 结构体
    • Go语言中的OOP
    • 方法和接口
    • 错误处理
  • Go进阶

    • Go进阶
  • Go框架

    • Go框架
  • Golang辅助

    • Golang辅助
  • CSS
  • HTML
  • JavaScript
  • 前端辅助
  • 常用命令
  • 性能监控工具
  • Windows下Docker使用
  • 日常学习
  • 其他导航
  • 基础

    • Golang环境

    • 语法

    • 数据类型与运算符

    • 分支语句

    • 循环语句

    • 数组

    • 切片

    • Map

    • String

    • 函数

      • 函数
      • 函数的使用
      • 函数的参数
      • 函数的返回值
      • return语句
      • 函数中变量作用域
      • 递归函数
      • defer语句
      • 函数的数据类型
      • 函数的本质
      • 匿名函数
      • 回调函数
      • 闭包
      • 包的管理

      • 指针

      • 结构体

      • Go语言中的OOP

      • 方法和接口

      • 错误处理

    • Go进阶

    • Go框架

    • Golang辅助

    • Golang
    • 基础
    • 函数
    Bruce
    2022-10-27
    目录

    闭包

    # 一、闭包

    # 闭包(closure)
    • 一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数,或者外部函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数.
    • 这个内层函数和外层函数的局部变量,统称为闭包结构.
    • 每当新调用一次外层函数,就会产生新的外层函数中的局部变量;而内层函数要访问对应的外层函数中的局部变量
    # 局部变量的生命周期
    • 正常的局部变量随着函数调用而创建,随着函数的结束而销毁
    • 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还是要继续使用.
    # 示例代码
    package main
    
    import "fmt"
    
    func main() {
    	/*
    		go语言支持函数式编程:
    			支持将一个函数作为另一个函数的参数.
    			也支持将一个函数作为另一个函数的返回值.
    
    		闭包(closure)
    			一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的的参数,或者外部函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数.
    			这个内层函数和外层函数的局部变量,统称为闭包结构.
    
    			局部变量的生命周期:
    				正常的局部变量随着函数调用而创建,随着函数的结束而销毁
    				但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还要继续使用.
    	*/
    	res1 := incrment() //res1 = fun
    	fmt.Printf("%T\n", res1)
    	fmt.Println(res1)
    	v1 := res1()
    	fmt.Println(v1)
    	v2 := res1()
    	fmt.Println(v2)
    	fmt.Println(res1())
    	fmt.Println(res1())
    	fmt.Println(res1())
    	fmt.Println(res1())
    
    	res2 := incrment()
    	fmt.Println(res2)
    	v3 := res2()
    	fmt.Println(v3)
    	fmt.Println(res2())
    
    	fmt.Println(res1())
    }
    
    func incrment() func() int { // 外层函数
    	//1.定义了一个局部变量
    	i := 0
    	//2.定义了一个匿名函数,连续自增并返回
    	fun := func() int { //内层函数
    		i++
    		return i
    	}
    	//3.返回该匿名函数
    	return fun
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    上次更新: 2024/04/09, 16:48:42
    回调函数
    包的管理

    ← 回调函数 包的管理→

    最近更新
    01
    AWS NAT-NetWork-Firwalld配置(一)
    04-09
    02
    AWS NAT-NetWork-Firwalld配置(二)
    04-09
    03
    kubernetes部署minio对象存储
    01-18
    更多文章>
    Theme by Vdoing | Copyright © 2019-2024 Bruce Tao Blog Space | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式