Go语言中的”闭包”是指
首先
开始接触Go语言时,我遇到了一个叫做闭包的东西。
我会写下我理解了这个功能具备哪些内容。
得出結論
在函数内部保持状态的功能
详细的
在文件中
当无名函数在Go中能够访问其周围的环境时,闭包就会发生。然后它可以持有自己的独特状态。随着我们创建函数的新实例,状态将变得分离。
以我个人的理解,这意味着“创建类的实例,并保持字段的值”。
具體的例子
(代码示例)
package main
import (
"fmt"
)
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
newInts := intSeq()
fmt.Println(newInts())
}
Go Playground – 来自Go编程语言
※已删除注释
当执行上面的操作时,将会输出以下内容。
1
2
3
1
在这种情况下,保持状态的是 intSeq() 函数内的 i 对吧?
在nextInt内部,会执行一个无名函数来执行i++操作,这样intSeq()中的i就会逐渐增加1。
当将intSeq()赋值给另一个变量(newInts)时,因为它保存了另一个状态,所以最后输出的是1。
结束
听说JS也有这个功能,但我既没用过也没见过呢。也许是因为JS引入了类的概念吧。
文献引用
GoLang文档中的闭包
Go Playground – Go编程语言