go defer

函数体执行结束后,按照调用顺序的反向,逐个执行

即时函数发生严重错误也会执行

支持匿名函数的调用

常用于自愿清理、文件关闭、解锁以及记录时间等操作

通过与匿名函数配合可在return之后修改函数计算结果

如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则则是引用某个变量的地址

go没有异常机制,但有panic/recover模式处理错误

panic可以在任何地方引发,但recover只有在defer调用的函数中有效


func main() {

    fmt.Println("111")

    defer fmt.Println("222")

    defer fmt.Println("333")

}

输出:

111

333

222

func main() {

    defer func() { //必须要先声明defer,否则不能捕获到panic异常

        fmt.Println("c")

        if err := recover(); err != nil {

            fmt.Println(err) //这里的err其实就是panic传入的内容

        }

        fmt.Println("d")

    }()

    f()

}

func f() {

    fmt.Println("a")

    panic(111111111)

    fmt.Println("b")

}

输出:

a

c

111111111

d

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

相关阅读更多精彩内容

  • 01.{ 换行: Opening Brace Can't Be Placed on a Separate Lin...
    码农不器阅读 2,470评论 0 14
  • 函数 Go函数不支持 嵌套、重载、默认参数 支持特性:无需声明原型、不定长度参数、多返回值、命名返回值参数、匿名函...
    kaxi4it阅读 919评论 0 0
  • 1 官方定义 A defer statement pushes a function call onto a li...
    Love语鬼阅读 1,172评论 0 3
  • Go语言做Web编程非常方便,并且在开发效率和程序运行效率方面都非常优秀。相比于Java,其最大的优势就是简便易用...
    暗黑破坏球嘿哈阅读 9,146评论 6 66
  • 苍蝇停在衣服上 一动不动 像死去了一样 我微微靠近 尽量不让气息让它惊慌 仔细观察它摇头晃脑 拿小手触动脸庞 我轻...
    萌大师阅读 271评论 0 0

友情链接更多精彩内容