log.fatal和panic的区别

log.fatal(err)
panic(err)

简单来说就是:
第一种在报错之后会立即终止整个程序(不执行defer)。
第二种在报错之后会终止当前报错的协程,然后返回到调用此函数的入口处继续执行。

log.fatal方法

首先看log.fatal方法的定义:

func Fatal(v ...any) {std.Output(2, fmt.Sprint(v...))os.Exit(1)
}

可以看到log.fatal主要做了以下三点:

  1. 打印输出内容。
  2. 退出应用程序。
  3. 不执行defer方法。

从源码中可以看出,log.fatal就是比os.Exit(1)多做了一步打印出错误内容。

panic方法

再看一下panic方法的定义:

// The panic built-in function stops normal execution of the current
// goroutine. When a function F calls panic, normal execution of F stops
// immediately. Any functions whose execution was deferred by F are run in
// the usual way, and then F returns to its caller. To the caller G, the
// invocation of F then behaves like a call to panic, terminating G's
// execution and running any deferred functions. This continues until all
// functions in the executing goroutine have stopped, in reverse order. At
// that point, the program is terminated with a non-zero exit code. This
// termination sequence is called panicking and can be controlled by the
// built-in function recover.
func panic(v any)

从注释出看出panic是:

  1. 当前函数立刻会停止执行(不是主程序)。
  2. 执行defer方法。
  3. 返回给调用者caller。
  4. 调用函数假装也收到了panic方法,从而他们也会执行以上的操作。
  5. 递归执行,直到最上层函数,如果都没函数处理这个异常,应用程序就会停止。

panic类似于其他语言里面的 try catch。

Go面试题——log.fatal和panic的区别相关推荐

  1. golang log.Fatal() 和 panic() 函数的区别

    在讲两者区别之前我们先看一下os.Exit()函数的定义: func Exit(code int)Exit causes the current program to exit with the gi ...

  2. 面试题:ConcurrentHashMap 和 Hashtable 的区别

    面试题:ConcurrentHashMap 和 Hashtable 的区别 关键词 1.8ConcurrentHashMap 只锁 首节点 ConcurrentHashMap 和 Hashtable ...

  3. (87)FPGA面试题-同步FIFO与异步FIFO区别?异步FIFO代码设计

    1.1 FPGA面试题-同步FIFO与异步FIFO区别?异步FIFO代码设计 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-同步FIFO与异步FIFO区 ...

  4. (34)FPGA面试题FPGA和CPLD有哪些区别

    1.1 FPGA面试题FPGA和CPLD有哪些区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题FPGA和CPLD有哪些区别: 5)结束语. 1.1.2 ...

  5. console.log()和console.dir()的区别

    前言:本博文主要讲解console.log()和console.dir()的区别. 文章目录 一.案例 二.运行效果图 三.总结 一.案例 <!DOCTYPE html> <html ...

  6. 经典面试题 HTTPS和HTTP有什么区别?

    经典面试题 HTTPS和HTTP有什么区别? 解决面试题,斩获心仪的 Offer 文章目录 经典面试题 HTTPS和HTTP有什么区别? 一.HTTPS和HTTP是什么? 二.HTTPS和HTTP有什 ...

  7. 复习Java.Lang包Java面试题Vector、ArrayList、LinkedList区别生活【记录一个咸鱼大学生三个月的奋进生活】007

    记录一个咸鱼大学生三个月的奋进生活007 复习Java(Lang包) 数据包装类 字符类Character的常用方法 字符串类(String) StringBuffer类的常用方法 Math类的常用方 ...

  8. linux 所有服务都无法开启,查看log Fatal server error (EE) Could not create lock file in /tmp/.tX0-lock

    多方查找发现是因为系统盘为readonly 的状态,因此导致无法写入临时文件,而无法开启服务 mount -o  remount rw / 最后经过多方面查看,发现是/etc/fstab 发生了修改, ...

  9. factorybean 声明_阿里面试题:BeanFactory与FactoryBean的区别

    作者:至尊宝 来源:cnblogs.com/aspirant/p/9082858.html BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的 ...

最新文章

  1. 面向中小企业的视频云服务 视频托管
  2. 2019-06-07 Java学习日记之CSS
  3. 通过随机数生成兑换码和概率生成随机数
  4. android通讯录上传服务器,Android 实现读取通讯录并上传服务器
  5. 电商网站前端架构 学习笔记(全是干货)
  6. python字符串split_python字符串之split
  7. 【HDU - 6203】ping ping ping(lca+贪心思想,对lca排序,树状数组差分)
  8. wpf计算字符大小占像素_LCD作为终端显示字符串的过程
  9. 20180209-sys模块
  10. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at
  11. 微信订阅消息推送(记录)
  12. 输入框数据的初始化拼装
  13. 用python实现自动化办公------Excel操作
  14. c语言if(x==0x0f){x=0;y^=1;},全国2007年7月高等教育自学考试计算机基础与程序
  15. 三大运营商的号段汇总
  16. 什么是 Keepalived ?
  17. Linux系统基础教程(2)
  18. Windows: 如何给USB设备安装驱动?
  19. 全球与中国柱塞计量泵市场现状及未来发展趋势
  20. 深度解密今日头条的个性化资讯推荐技术

热门文章

  1. 如何精进Excel水平?从邮件小工具讲起
  2. 如何做一个基于JAVA房产中介预约看房系统毕业设计毕设作品(springboot框架)
  3. face_recognition模块方法集合
  4. 如何显示文件夹的后缀和隐藏文件
  5. Android RecyclerView只显示第一行
  6. 物联网卡充值续费仍无法使用,关键原因在这里!
  7. 慈航公益仲恺义工大区和爱心企业助力探亲日慈善活动
  8. MybatisPlus代码生成器实现只覆盖指定文件
  9. php支付宝pc收银台,支付宝支付-PC电脑网站支付
  10. thzvv.com forum php,为什么Naver账号不能用了?