【golang/go语言】闭包(closure)

闭包(closure)

一个外层函数中有内层函数,该内层函数中操作了外层函数的局部变量(外层函数的参数或直接定义的变量),并且该外层函数的返回值就是这个内层函数,则内层函数和外层函数的局部变量统称为闭包结构。

该局部变量的生命周期会发生改变,正常局部变量的生命周期随着函数的调用而创建,随着调用的结束和销毁。但闭包中外层函数的局部变量并不会随着外层函数的调用结束而销毁,因为内层函数有可能会继续使用该局部变量。

package main

import (
   "fmt"
)

func main() {
   fun1 := increment()
   fmt.Printf("type: %T\n", fun1)  // type: func() int
   fmt.Printf("value: %v\n", fun1) // value: 0x1021e1590

   fmt.Println("fun1: ", fun1()) // 1
   fmt.Println("fun1: ", fun1()) // 2

   fun2 := increment()
   fmt.Println("fun2: ", fun2()) // 1
   fmt.Println("fun2: ", fun2()) // 2

   fmt.Println("fun1: ", fun1()) // 3
}

func increment() func() int {
   a, b := 0, 0
   fun := func() int {
      a++
      fmt.Println("b:", b) // 一直是0
      return a
   }
   return fun
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值