defer 语句是在当前函数执行结束前执行的,所以即使在 defer 语句中修改了返回值,也不会影响函数的实际返回值。这是因为 return 语句在执行之前已经确定了返回值,而且在函数执行结束前,defer 语句不能修改已经确定的返回值。
在 Go 语言中,defer 语句无法修改已经确定的返回值。但是,可以通过将返回值作为参数传递给 defer 语句中的函数,来修改返回值。
1.请填写输出值()
func add(x, y int) (z int) {
defer func() {
z += 100
}()
z=x+y
return
}
func main() {
println(add(1, 2)) //打印?
}
2. 请填写,a处打印() b处打印( )
func add(x, y int) (z int) {
defer func() {
println(z) // a.输出多少?
}
z=x+y
return z + 200
}
func main() {
println(add(1, 2)) // b.输出多少
}
3.请问以下代码最终会输出啥?
func test(x int) {
defer println("a")
defer println("b")
defer func() {
println(100 / x)
}()
defer println("c")
}
func main() {
test(0)
}
func test(x int) {
defer println("a")
defer println("b")
defer println(100 / x)
defer println("c")
}
func main() {
test(0)
}
4.请问如下代码A打印为() B打印为()
func test() {
x, y := 10, 20
defer func(i int) {
println("defer:", i, y) // A:
}(x)
x += 10
y += 100
println("x =", x, "y =", y) //B:
}
func main() {
test()
}
5.请问以下代码执行后打印为
func test() {
defer func() {
fmt.Println(recover())
}()
defer func() {
panic("defer panic")
}()
panic("test panic")
}
func main() {
test()
}
6. 请问如下代码,执行test后会返回什么? 程序是否会发生 panic ,为什么?
func test() {
defer recover()
defer fmt.Println(recover())
defer func() {
func() {
println("defer inner")
recover()
}()
}()
panic("test panic")
}
func main() {
test()
}