戈朗的关闭
Go 语言提供了一个被称为 匿名功能 的特殊功能。匿名函数可以形成闭包。闭包是一种特殊类型的匿名函数,它引用在函数本身之外声明的变量。这类似于访问在函数声明之前可用的全局变量。
例:
// Golang program to illustrate how
// to create a Closure
package main
import "fmt"
func main() {
// Declaring the variable
GFG := 0
// Assigning an anonymous
// function to a variable
counter := func() int {
GFG += 1
return GFG
}
fmt.Println(counter())
fmt.Println(counter())
}
输出:
1
2
解释:变量 GFG 没有作为参数传递给匿名函数,但是函数可以访问它。在这个例子中,有一个小问题,因为任何其他将在 main 中定义的函数都可以访问全局变量 GFG ,并且它可以在不调用计数器函数的情况下更改它。因此关闭还提供了另一个方面,即数据隔离。
// Golang program to illustrate how
// to create data isolation
package main
import "fmt"
// newCounter function to
// isolate global variable
func newCounter() func() int {
GFG := 0
return func() int {
GFG += 1
return GFG
}
}
func main() {
// newCounter function is
// assigned to a variable
counter := newCounter()
// invoke counter
fmt.Println(counter())
// invoke counter
fmt.Println(counter())
}
输出:
1
2
解释:闭包引用了变量 GFG 即使在 newCounter() 函数已经完成运行,但是 newCounter() 函数之外没有其他代码可以访问这个变量。这就是如何在函数调用之间保持数据的持久性,同时将数据与其他代码隔离开来。
版权属于:月萌API www.moonapi.com,转载请注明出处