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语言成功创建了闭包实例。

上一篇:一篇文章弄懂session的两种存储方式


下一篇:Codeforces Round #746 (Div. 2) A-C