为什么我们在 Go 的 foo() 内部有一个隔离的 test()?



为什么下面的代码中的test((函数是这样组织的,而不是把test((中的所有东西都拿出来放到foo((中?谢谢!

func foo() error{
...
err = test() error {
...
...
}
...
}

您可能需要这样的内部函数有几个原因,但到目前为止,最常见的用途是当您需要在内部函数中使用包含函数的局部变量时。为什么还要使用内部功能?有时您需要它传递到库中,或者您需要它来执行godefer语句。

内部函数"关闭"它使用的任何来自外部函数的变量,即使在外部函数返回后,这些变量仍然有效。因此,以这种方式定义的函数称为"闭包"。

常见的用途是回调等,用于某些库。有时,当场制作您需要的功能会更容易。

另一个常见用途是如果要将defer与代码块一起使用。defer仅适用于函数,并且通常需要来自外部函数的变量。通常,您会看到这种情况与recover和命名返回值一起使用。显然,这与原因#1重叠。

最后,有时您希望并行运行函数的某些部分,因此您创建一个闭包并将其作为带有go的 goroutine 调用。

当然,闭包还有其他用途...

最新更新