为什么我们在Go中的foo()里面有一个孤立的test()?

时间:2017-07-27 03:48:55

标签: go

为什么test()函数在下面的代码中组织起来,而不是将test()中的所有内容都放到foo()中?谢谢!

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

1 个答案:

答案 0 :(得分:1)

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

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

常见的用途是回调等用于某些库的回调。有时它更容易在现场制作你需要的功能。

另一个常见用途是,如果您想将defer与代码块一起使用。 defer仅适用于函数,通常需要外部函数中的变量。通常,您会看到此案例与recover一起使用并命名为返回值。显然,这与理由#1重叠。

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

封闭当然还有其他用途......