Golang 如何使用闭包

Golang 如何使用闭包

为了理解什么是闭包,我们必须知道什么是匿名函数以及如何使用它们。

匿名函数

在Go中,匿名函数是那些没有任何名字的函数。简单地说,匿名函数在声明时不使用任何变量作为名称。

我们知道,我们用类似的语法来声明一个函数,如下图所示。

func Sample(){
   // some code
}

虽然我们确实为上述函数起了一个名字( Sample ),但在匿名函数的情况下,我们没有名字。

什么是闭合函数?

闭包函数是可以访问其周围环境的匿名函数。在 Go 中,封闭函数可以有自己的状态,当我们创建新的函数实例时,这个状态会被隔离。

好的,现在让我们考虑一个非常简单的 封闭 例子 。

例子

考虑一下下面的代码。

package main
import (
   "fmt"
)
func main() {
   x := 22
   ff := func() {
      y := x / 2
      fmt.Println(y)
   }
   ff()
}

输出

如果我们用命令 go run main.go 运行这段代码,我们将在终端上得到以下输出。

11

在上面的代码中,我们创建了一个包含 x 的名为 ff 的函数的闭包 。 匿名函数ff可以直接访问值 x ,这又是 闭包 的属性。

闭包还提供了一个叫做数据隔离的属性,其中闭包的状态在创建时是唯一的,这只是意味着每个闭包有自己的状态。

让我们借助于一个例子来理解这个概念。

例子

请看下面的代码。

package main
import (
   "fmt"
)
func ff() func() int {
   z := 0
   return func() int {
      z += 100
      return z
   }
}
func main() {
   x := ff()
   y := ff()
   fmt.Println(x())
   fmt.Println(y())
   x()
   fmt.Println(x())
   fmt.Println(y())
}

输出

如果我们用命令 go run main.go 来运行这段代码,我们会看到终端上打印出以下输出。

100
100
300
200

我们可以注意到上述输出中的差异,这清楚地表明它们包含不同的状态。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程