本网站可以通过分类标签帮助你快速筛选出你想看的文章,记住地址:www.Facec.cc

go 异常处理 (Error vs Exception)

一、Error vs Exception

先聊聊我个人,之前最开始接触的Java 和 Pyhton,往往需要对一整块代码进行try-catch{}。

1.Error

后来接触go开发,发现他的error机制, 类似于这样 err := func(),这样就需要频繁的 if err!=nil来处理,语法这点确实比较繁琐,但我们收到错误能会立马处理,是否需要服务降级或容错,还是干其他事,我认为这是一个比较合理的。

2.Exception

回看java和python,在异常处理中,一些良性的异常和一些致命的错误,很容易无法很明确区分,因为大部分开发者都在随意的向上抛 再集中捕获。

二、go Panic何时使用?

首先,panic是会导致程序终止运行的
我认为go panic的机制跟java/python的异常处理不一样, 使用场景也不一样,panic适用于一些致命的错误,导致程序无法进行下去(尽管有个兜底recover操作)

  • 适用panic的场景:数组越界 或者 你希望运行一个程序,但是程序的配置文件压根没有加载,且没有做默认配置的处理,这种场景抛出panic才是最合理的。

  • 不适用panic的场景:其他的一些go异常,比如 int转string转换失败,返回err才是最合理的,开发人员可以根据err是否为nil,去做一些后续异常的处理

# golang  

评论