Skip to main content
 首页 » 编程设计

Golang 闭包快速入门

2022年07月19日141zlslch

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


本文参考链接:https://blog.csdn.net/neweastsun/article/details/120597649
阅读延展