gpt4 book ai didi

go - defer 语句是如何工作的

转载 作者:IT王子 更新时间:2023-10-29 01:17:49 34 4
gpt4 key购买 nike

我尝试学习 golang 并使用有效的 go 作为讲座。我卡在capital defer上了,看下面的代码

package main

import "fmt"

func trace(s string) string {
fmt.Println("entering:", s)
return s
}

func un(s string) {
fmt.Println("leaving:", s)
}

func a() {
defer un(trace("a"))
fmt.Println("in a")
}

func b() {
defer un(trace("b"))
fmt.Println("in b")
a()
}

func main() {
b()
}

我得到的输出

entering: b
in b
entering: a
in a
leaving: a
leaving: b

我知道,defer 语句将在函数中的 return 语句之后执行。但是在这里,为什么输入:b是第一个输出呢?我预计在 b 中作为第一输出!

最佳答案

根据 http://golang.org/doc/effective_go.html#defer :

The arguments to the deferred function (which include the receiver if the function is a method) are evaluated when the defer executes, not when the call executes. Besides avoiding worries about variables changing values as the function executes, this means that a single deferred call site can defer multiple function executions.

所以延迟函数的参数(在你的例子中是trace("b"))先求值

关于go - defer 语句是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775306/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com