如何在 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
在上面的代码中,我们创建了一个名为 **ff** 的函数的闭包,其中包含 **x**。匿名函数 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
我们可以注意到上述输出中的差异,这清楚地表明它们包含不同的状态。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP