• go语文中panic的使用


    panic

      关键字panic的作用是制造一次宕机,宕机就代表程序运行终止,但是已经“生效”的延迟函数仍会执行(即已经压入栈的defer延迟函数,panic之前的)。

      为什么要制造宕机呢?是因为宕机不容易遇到?还是因为程序有错就是直接报错,都没有执行,哪来的宕机?

      Go程序设计语言中这样提到:如果碰到“不可能发生的”的状况,宕机是最好的处理方式。这个“不可能发生的”状况很难理解,不过可以这样想:一个机器人的能源供应,可能依靠太阳能,可能依靠电能,但是如果靠吃饭解决,那么这肯定就不可思议了,这时候就应该触发一次宕机。

    recover

       recover从英文的意思上就知道是恢复,那么这个恢复是恢复什么呢?是恢复运行状态,继续运行?还是恢复到宕机之前?

      其实,recover在英文中指的是受伤的愈合,防止伤口进一步感染。伤是愈合了,但是伤了始终是伤了,愈合只不过是事后处理而已。所以golang中的recover也只是发生宕机之后的后事处理。

      所以这里的recover只是用来接收panic触发的宕机,如果panic触发宕机,传给panic的任意类型的参数,recover会接收到这个参数,recover获取到值之后才知道发生了宕机;相反,如果程序中的recover没有获取到值,则代表没有发生宕机,那么recover的值就为nil,通过这个可以来进一步处理后事。

      前面已经提到panic的时候,已经说了,一旦发生宕机,其后的代码是不会执行的,但是会调用位于panic代码所在的哪一行之前的defer延迟函数,所以说这个特性就决定recover应该用在defer函数中,否则一旦发生宕机,除了defer延迟函数中的语句还能执行外,其他的语句都是不能执行的。

      如果触发宕机,panic的错误信息会显示,如果有recover时,则信息会被recover截获,于是错误信息就不会显示,转而进行下一步操作。

    一、如果panic 和 recover不在同一个方法内,则抛出异常代码之后的代码不会被执行,下面是代码

     二、如果panic 和 recover在同一个方法内,则抛出异常代码之后的代码会继续执行,下面是代码

     

  • 相关阅读:
    数据库 Mysql事务详解
    数据库 Mysql内容补充二
    数据库 Mysql内容补充一
    优化Django ORM中的性能问题(含prefetch_related 和 select_related)
    django高级
    百度,谷歌,360,搜狗,神马等蜘蛛IP段
    中国电信、联通、移动、教育IP分布
    sed 给文件每行末尾追加相同字符
    centos7 lvs keepalived做DNS集群负载
    Notepad++ 删除空白行的方法
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/13458087.html
Copyright © 2020-2023  润新知