当前位置: > > > > 延迟命名返回值的行为
来源:stackoverflow
2024-04-28 08:12:35
0浏览
收藏
从现在开始,我们要努力学习啦!今天我给大家带来《延迟命名返回值的行为》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!
问题内容
在此示例中,延迟函数在周围函数返回后递增返回值 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
关键字的 。
参见:
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的技术知识我们会一点点深入介绍,欢迎大家关注公众号,一起学习编程~