go-错误与异常

在编写程序的时候很容易遇见的一个问题,也是必须要处理的,今天简单的去了解了一下什么是错误什么是异常,在go中是如何处理的

错误异常 在了解怎么做之前,我们首先应该要明白,什么是错误,什么是异常

  • 错误:可以预测
  • 异常:不可预测
    在程序的编码中,我们写的代码有时候我们知道他可能会出现什么错,那么我们就叫做错误,比如说我们写的这个代码:
    func pan(i int) { if i == 0 { err := fmt.Sprintf("i 不能为 0 ", time.Now()) panic(err) } }

    如果我们用这个判断除数的话,那么可以知道除数是不能为0的,如果出现了除数为0那么他肯定是错误的,这种可以预测的,我们称之为错误。其他的错误是我们没有预测那么那些错误就是异常。感觉说的有点小绕。
    其实简单的就是,预测的叫做错误没有预测的就是异常。
    如何进行处理在go中如果我们执行了panic,我们会得到下面这种结构。首先我们来看一下我们执行的代码:
    func main() { pan(0) fmt.Println("main安全退出") } func pan(i int) {if i == 0 { err := fmt.Sprintf("i 不能为 0 ", time.Now()) panic(err) } }

    这里我们输入了0,那么肯定是会执行panic函数的,那么执行了panic函数过后程序就会直接被终止,所以我们会得到下面这个结果。
    /private/var/folders/55/2cf9m54s36q_1yf2j1svkf580000gn/T/GoLand/___go_build_awesomeProject1_2022_4_9_PanicAndRecover panic: i 不能为 0 %!(EXTRA time.Time=2022-04-09 11:19:17.141969 +0800 CST m=+0.000072167)goroutine 1 [running]: main.pan(0x0) /Users/lizhongzheng/GolandProjects/awesomeProject1/2022-4-9/PanicAndRecover/main.go:16 +0xd0 main.main() /Users/lizhongzheng/GolandProjects/awesomeProject1/2022-4-9/PanicAndRecover/main.go:9 +0x24

    这里会清楚的写到在那里执行执行了panic,然后panic的错误是什么等相关信息。
    但是我们这里就会产生一个疑问,如果我们的程序正在运行但是不想让这个Panic将我们的程序直接终止,我们应该怎么处理。我们看到这里的结果是直接终止了程序的执行,最后是没有回到主函数执行输出的。
    对着这种处理,在php和java中使用有try catch这个方法进行处理,但是在go中是没有的,那么应该如果进行类似的处理呢?
    这里我们就要使用到一个recover()函数了,这个函数和panic一般都是一起出现的,这个函数的作用就是处理panic报的错误,然后收集不让程序直接退出。
    这里我们来演示一下有recover这个函数后,程序的执行吧,还是先上我们执行的源码:
    func main() { pan(0) fmt.Println("main安全退出") } func pan(i int) { defer func() { if err := recover(); err != nil { fmt.Println("检测到错误", err) } else { panic("检测失败") } }() if i == 0 { err := fmt.Sprintf("i 不能为 0 ", time.Now()) panic(err) } }

    这个我们使用的defer,延迟处理函数,然后在这里return前进行一个调用,对于defer函数在以后我们再进行讲解,在这里我们知道它是延迟处理就可以了。
    然后下面是我们的执行结果:
    /private/var/folders/55/2cf9m54s36q_1yf2j1svkf580000gn/T/GoLand/___go_build_awesomeProject1_2022_4_9_PanicAndRecover 检测到错误 i 不能为 0 %!(EXTRA time.Time=2022-04-09 11:27:48.221554 +0800 CST m=+0.000130459)main安全退出

    【go-错误与异常】不错我们执行到了最后,main函数安全退出,我们就演示到这里了,这就是go处理错误和异常的方法了。

    推荐阅读