(译)Go 语言中异常处理的艺术

作者: 谢烟客 | 来源:发表于2017-09-07 10:52 被阅读724次

原文链接:The Art of Error Handling in Go

Go 语言的异常处理与其他语言截然不同,Go 语言中没有 try catch 或 except。取而代之的是 Go 中的每一个函数都期待返回一个 error 变量,调用者负责相应的检查及处理。当函数返回异常时,有 5 种常见的策略进行处理:

  1. 策略一:向外层传递异常

    因此,子函数的异常将被视为程序执行失败。这个示例包含 2 个函数,GetLink() 函数的中的异常向上传递到了 main 函数中。这在 Go 语言的异常处理中是非常常见的策略。 image.png
  2. 策略二:异常抛出后进行不断重试

    对于一些未知或者临时性异常,重试机制是是非常有益的。在彻底放弃之前可以通过增加延迟或者重试次数的限制进行一些重试的操作。 image.png
  3. 策略三:更优雅的退出程序

    如果程序在发生异常后已经不可用,那么打印异常信息并优雅的退出是更好的选择,但这种策略的操作必须在 main 函数中进行。 image.png
    子程序或者子函数中产生异常,应该将异常向上传递,并且子程序不应该执行退出策略。
    异常日志的信息最好使用 log 包进行打印,log 包提供了一些除异常信息以外的有用信息,这对长时间运行的程序来说是非常的有用处的。 image.png
    因此,log 包将给出异常的确切日期及时间。
  4. 策略四:日志与继续执行

    这种情况下,记录异常的日志就足够了,然后继续执行程序流程,也许还需要进行一些功能降级。 image.png
    在这里 redis 客户端尝试 ping 服务端,如果发生异常,只进行日志的记录并且其他操作继续进行。这个策略的执行前提是产生的异常不会对程序的流程造成巨大影响。
  5. 策略五:忽略异常

    这也许是最糟糕的策略,那就是忽略异常继续前行。 image.png
    在这里 os.RemoveAll(dir) 函数如果抛出异常将被忽略,因为操作系统会定期清理 temp 目录,所以即使 os.RemoveAll(dir) 执行失败也不会对程序流程造成影响。

    如果执行此策略,忽略异常是可以的但是一定不要忘记写文档!

相关文章

  • (译)Go 语言中异常处理的艺术

    原文链接:The Art of Error Handling in Go Go 语言的异常处理与其他语言截然不同,...

  • Go语言之错误处理

    一. 异常处理 1. error接口 Go语言中引入了一个关于错误处理的标准模式error接口,是go语言的内置接...

  • 8 Go错误与异常:error、panic、recover

    一、程序设计中的错误和异常处理 对错误和异常处理的支持是现代编程语言的标配,在Go语言中,程序的错误由内建的err...

  • 32. panic 和 recover

    32. panic 和 recover 什么是 panic? 在 Go 语言中,程序中一般是使用[错误]来处理异常...

  • Go学习笔记-错误与异常

    Go 语言的异常处理语法绝对是独树一帜,在我见过的诸多高级语言中,Go 语言的错误处理形式就是一朵奇葩。 一方面它...

  • 16-Go语言异常处理

    异常 不按照我们期望执行的都可以称之为异常 在Go语言中如何处理异常一种是程序发生异常,将异常信息反馈给使用者一种...

  • Go语言探索 - 12(结局)

    Go语言基础系列博客用到的所有示例代码 上一篇文章文章主要学习了Go语言中的接口、反射以及错误和异常处理。本篇文章...

  • 异常处理

    Go 的异常处理不同于其他语言使用的结构 对于 go 的异常处理, 使用 defer, panic, recove...

  • panic 和 recover

    什么是 panic? 在 Go 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就...

  • TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语...

网友评论

本文标题:(译)Go 语言中异常处理的艺术

本文链接:https://www.haomeiwen.com/subject/harvjxtx.html