【Golang】Go语言中defer与return的精妙交织:探索延迟执行与返回顺序的微妙关系
package main
import "fmt"
// 定义一个简单的函数,使用defer和return
func foo() int {
var i int
defer func() {
i++ // 此处的i是闭包中的变量,会影响最终的返回值
}()
return i
}
func main() {
v := foo()
fmt.Println("返回的值是:", v) // 输出将会是1,而不是预期的0
}
这段代码演示了在Go语言中,defer
语句会在函数返回之前执行,但它并不会影响函数的返回值。在foo
函数中,return i
在defer
之后执行,但defer
中对i
的修改并不会影响函数的返回值,因为返回值已经在defer
执行前被确定。因此,foo
函数返回的是进入defer
时的i
的值,即0
,而不是defer
中修改后的i
的值,输出结果为1
。
评论已关闭