为什么test()函数在下面的代码中组织起来,而不是将test()中的所有内容都放到foo()中?谢谢!
func foo() error{
...
err = test() error {
...
...
}
...
}
答案 0 :(得分:1)
有几个原因可能需要像这样的内部函数,但到目前为止,最常见的用途是当你需要在内部函数中使用包含函数的局部变量时。为什么一个内在的功能呢?有时您需要将其传递到库中,或者您需要go
或defer
语句。
内部函数“关闭”它使用的来自外部函数的任何变量,即使在外部函数返回后这些变量仍然有效。因此,以这种方式定义的函数称为“闭包”。
常见的用途是回调等用于某些库的回调。有时它更容易在现场制作你需要的功能。
另一个常见用途是,如果您想将defer
与代码块一起使用。 defer
仅适用于函数,通常需要外部函数中的变量。通常,您会看到此案例与recover
一起使用并命名为返回值。显然,这与理由#1重叠。
最后,有时您希望并行运行函数的某些部分,因此您创建一个闭包并将其作为带有go
的goroutine调用。
封闭当然还有其他用途......