首页 > 后端开发 > Golang > 为什么在 Go 的 `defer` 语句中的闭包体后面使用'( )”?

为什么在 Go 的 `defer` 语句中的闭包体后面使用'( )”?

Barbara Streisand
发布: 2024-12-02 18:55:11
原创
690 人浏览过

Why Use

Go 中闭包体中“( )”背后的原理

Go 中,在闭包体后添加“( )”并不特定于闭包,而是适用于 defer 语句中的任何函数调用。语言规范要求 defer 语句中的表达式必须始终是函数调用。

考虑示例:

defer f()
登录后复制

此表达式尝试推迟函数 f 本身的执行,这是没有意义的。相反,正确的语法是:

defer f()()
登录后复制

这会构造一个闭包,捕获当前上下文并在激活 defer 语句时执行函数 f。外面的括号立即执行闭包,确保函数调用在 defer 语句执行后发生。

这种语法与 Go 中函数调用的一般用法一致,总是需要括号来执行它们。例如,要在定义闭包时打印 i 的值,请使用以下语法:

defer func(n int) { fmt.Println(n) }(i)
登录后复制

相反,要在执行闭包时打印 i 的值,请使用:

defer func() { fmt.Println(i) }()
登录后复制

理解这个原则可以清楚地理解 Go 中 defer 语句的行为以及闭包体内“( )”的正确用法,以及超越。

以上是为什么在 Go 的 `defer` 语句中的闭包体后面使用'( )”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板