登录
首页 >  Golang >  Go问答

延迟函数返回值

来源:stackoverflow

时间:2024-02-29 15:51:18 114浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《延迟函数返回值》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

func main() {

    println(DeferFunc1(1))
    println(DeferFunc2(1))
    println(DeferFunc3(1))
}

func DeferFunc1(i int) (t int) {
    t = i
    defer func() {
        t += 3
    }()
    return t
}

func DeferFunc2(i int) int {
    t := i
    defer func() {
        t += 3
    }()
    return t
}

func DeferFunc3(i int) (t int) {
    defer func() {
        t += i
    }()
    return 2
}

以上代码将打印:4 1 3。谁能解释一下吗?当然,deferfunc1 应该返回 4。但为什么 deferfunc2deferfunc3 会分别返回 13 呢?这与 go 中的闭包或变量作用域有关吗?


解决方案


如果 DeferFunc1 对您有意义,那么 DeferFunc3 应该说明相同的概念,即您可以修改命名返回值。

DeferFunc1 中,您将延迟中的 3 与 1 相加,得到预期的 4。
DeferFunc3 中,您在 defer 中将 1 添加到 2,得到 3。这里裸返回,或者返回 t 将使您得到 4。但在这种情况下,t 在您的 defer 运行之前被分配值 2,所以您得到 3。
DeferFunc2 中,您没有使用命名返回,因此您无法利用此技术。

理论要掌握,实操不能落!以上关于《延迟函数返回值》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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