go的 err!=nil 和 panic+recover 这两种错误处理机制的关系和区别是什么?

不少资料都说go的panic+recover可以拿来当try catch用,那既然这样,为什么还需要 err!=nil,像java那样所有地方都 try catch 不就行了? 有人知道其中的内在联系吗?

已邀请:

TeiJin

赞同来自: dncmn

我觉得err != nil 更多的时候是为了处理可预知的bug, 而panic+recover 是处理未知无法控制的bug, 我觉得出现err != nil 是为了让人编程更加可靠, 就像java 里, 抛出exception,推荐抛出更细致已知的对应exception,这些都是为了程序的健壮性,我觉得panic+recover 不要滥用, 基本上程序最好只用err != nil 就够了, 说明程序都在你掌控中,当然一些超异常的报错,就靠panic来保证程序不瞬间故障了。 至于更底层的联系区别, 坐等大神解释吧

yet

赞同来自:

1.panic我很少用, 只有程序启动时有配置等错误时使用

  1. recover这个我一般用来防止程序因为未知异常跪掉
  2. err!=nil 常规错误处理,是有必要的

meagle - https://www.keyla.vip/

赞同来自:

errors are not special, they are just values

pysta - 90 coder

赞同来自:

赞同一楼的看法,凡是能够预测到的结果一般都应该用错误来处理,panic只是用来处理意外,这种意外是事先没有想到会发生的。

要回复问题请先登录注册