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编程语言

广告
将在 10 秒后关闭
bannerAds