Go defer 函数返回值

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。但为什么 willDeferFunc2和will分别DeferFunc3返回1和呢?3这与 Go 中的闭包或变量作用域有关吗?


动漫人物
浏览 135回答 1
1回答

素胚勾勒不出你

如果DeferFunc1对您有意义,那么DeferFunc3它们应该说明相同的概念,即您可以修改命名的返回值。在DeferFunc1你的延迟中添加 3 到 1,得到你预期的 4。在DeferFunc3你的延迟中添加 1 到 2,得到 3。这里的裸返回,或者返回 t 会让你得到 4。但在这种情况下,t是在延迟运行之前分配值 2,因此您得到 3。由于DeferFunc2您没有使用命名返回,因此您无法利用此技术。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go