Go 中的闭包调用
在 Go 中,闭包主体后面括号的使用不仅限于闭包上下文。控制这种行为的核心概念是延迟语句中的表达式必须是函数调用。
带有闭包的函数文字
考虑一个函数文字,例如 func(ch chan int) { ch
延迟语句
在延迟语句中,例如 defer func() { result } (),括号确保所包含的表达式是函数调用。如果没有此语法,表达式将不完整并且不是有效的函数调用。因此,延迟语句的语法要求表达式必须是函数调用。
与函数调用的正交性
此正交性确保与延迟语句之外的函数调用的一致性。例如,f(),其中 f 是函数值,表示返回值的函数调用。相反,不带括号的 f 表示函数值本身。这种并行语法也适用于延迟语句中的表达式。
闭包执行
在延迟语句中定义的闭包中,括号确定闭包何时执行。例如,在 defer func() { fmt. Println(i) }(),遇到defer语句时闭包立即执行,捕获i的当前值。相反, defer func(n int) { fmt. Println(n) }(i) 捕获并打印 defer 语句执行时的 i 值,而不是闭包执行时的值。
以上是为什么 Go 的延迟语句中的闭包体后面需要括号?的详细内容。更多信息请关注PHP中文网其他相关文章!