在 Go 中,延迟函数调用允许您在周围函数返回后执行代码。但是,如果您不了解如何处理参数,则延迟调用的行为可能会令人困惑。
“Go 之旅”中的引述指出“延迟调用的参数会立即求值,但直到周围函数返回后才会执行函数调用。”这意味着:
让我们检查一下提供的示例:
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") }
何时main() 被调用,会发生以下情况:
理解参数求值和函数执行之间的区别对于在 Go 中有效使用延迟调用至关重要。执行 defer 语句时会立即计算参数,而函数体仅在封闭函数返回时执行。这使您可以控制执行操作的顺序,并避免与意外函数行为相关的潜在问题。
以上是Go 延迟调用:参数是立即求值还是在函数执行时求值?的详细内容。更多信息请关注PHP中文网其他相关文章!