Golang 闭包快速入门

闭包(closure)是函数式语言实现词法作用域的技术,也称绑定。第一次读这个定义,可能有点懵,简言之,闭包就是函数值,它可以引用它的函数体所包含的变量。需要注意的是闭包不是匿名函数。

简单示例

下面创建简单闭包示例,并通过该实例学习其工作原理。首先创建函数 getLimit()函数,其中包括 int类型limit 变量,并被设置为10,接着连续调用该函数:

main.go

package main

import "fmt"

func getLimit() func() int {
    limit := 10
    return func() int {
        limit -= 1
        return limit
    }
}

func main() {
    limit := getLimit()
    fmt.Println(limit())
    fmt.Println(limit())
}

现在如果运行程序,输出如下:

$ go run main.go

9
8

为什么这很重要呢?limit 变量给绑定到 getLimit()函数,如果再次绑定到 limit2变量,但两者之间的状态不会相互影响:

main.go

package main

import "fmt"

func getLimit() func() int {
    limit := 10
    return func() int {
        limit -= 1
        return limit
    }
}

func main() {
    limit := getLimit()
    fmt.Println(limit()) // 9
    fmt.Println(limit()) // 8

    limit2 := getLimit()
    fmt.Println(limit2()) // 9
    fmt.Println(limit2()) // 8

    fmt.Println(limit()) // 7

}

运行程序,输出如下:

9
8
9
8
7

ok,我们已经使用Go语言成功创建了闭包实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值