首页 > 后端开发 > Golang > Go 中的延迟函数参数会发生什么?

Go 中的延迟函数参数会发生什么?

DDD
发布: 2024-12-20 12:37:11
原创
594 人浏览过

What Happens to Deferred Function Arguments in Go?

评估延迟函数参数

问题: Go 之旅中的一句话指出“延迟调用的参数立即进行评估。”这意味着什么以及实际评估的是什么?

答案:

在 Go 中,defer 语句会延迟函数的执行,直到封闭函数返回。但是,延迟函数的参数的评估会立即发生。

分解评估过程:

规范规定对于每个“defer”语句:

  • 函数值: 要延迟的函数计算为通常。
  • 参数:延迟函数的参数也会立即计算。

实际的函数调用在周围函数返回之前不会执行。

示例:

考虑以下内容代码:

func def(s string) func() {
    fmt.Println("tier up")
    fmt.Println(s)
    return func() { fmt.Println("clean up") }
}

func main() {
    defer def("defered line")()
    fmt.Println("main")
}
登录后复制

求值顺序:

  1. def() 参数求值: 参数“defered line”立即求值.
  2. def() 函数求值:调用 def() 函数,打印“tier up”和“defered line”。
  3. 延迟函数求值: def() 的返回值被求值,这是一个函数打印“clean up.”
  4. 延迟函数执行:当 main() 返回时,执行延迟函数,打印“清理。”

结论:

当使用 defer 语句时,延迟函数的参数会立即计算。此过程确保函数在执行时可以访问变量的最新值。然而,延迟函数的实际执行会被延迟,直到周围函数返回为止。

以上是Go 中的延迟函数参数会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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