golang defer

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()
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 序 本文主要研究一下golang的defer defer return先赋值(对于命名返回值),然后执行defer...
    go4it阅读 400评论 0 0
  • Defer Go的控制流有一些常用的机制:if, for, switch, goto. 它也拥有可以在独立的gor...
    Wenchao阅读 405评论 0 2
  • 网上内容摘录学习 defer基础使用 此段落参考 https://my.oschina.net/chai2010/...
    Lucas_Ye阅读 615评论 0 7
  • 引用 golang defer实现原理 Golang之轻松化解defer的温柔陷阱 Golang中defer、re...
    8411e9740257阅读 2,092评论 0 2
  • defer Golang中的defer会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处...
    learninginto阅读 255评论 0 3

友情链接更多精彩内容