登录
首页 >  Golang >  Go问答

延迟命名返回值的行为

来源:stackoverflow

时间:2024-04-28 08:12:35 478浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《延迟命名返回值的行为》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

在此示例中,延迟函数在周围函数返回后递增返回值 i。因此,该函数返回 2:

func c() (i int) {
    defer func() { i++ }()
    return 1
}

为什么会返回 2?

go 博客延迟、恐慌和恢复

延迟函数可以读取并分配给返回函数的命名返回值。

我认为程序员的意图是返回 1 作为结果,并想知道为什么它是重写的,以及背后的设计决策是什么。


解决方案


延迟函数在该 return 语句设置任何结果参数之后但在函数返回到其调用者之前执行。
执行顺序:

func c() (i int) { // i = 0
    defer func() { i++ }()
    return 1  // i = 1
 // run deferred function here i++ => i = 2
}

查看 defer 关键字的 example

参见Defer_statements

lock(l)
defer unlock(l)  // unlocking happens before surrounding function returns

// prints 3 2 1 0 before surrounding function returns
for i := 0; i <= 3; i++ {
    defer fmt.Print(i)
}

// f returns 42
func f() (result int) {
    defer func() {
        // result is accessed after it was set to 6 by the return statement
        result *= 7
    }()
    return 6
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>