go异常捕获

265 阅读1分钟

前言

在go程序中,如果程序发生异常,那么程序就会中断,go提供Recover()恢复异常处理

异常处理

Java是通过try{}catch捕获异常


public class HelloService {

    public static void main(String[] args) {
        try {
            int a = 1 / 0;
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("执行结束=====================");
    }
}

go中使用Recover()

package main  
  
import (  
"fmt"  
"log"  
)  
  
func main() {  
say()  
fmt.Println("执行结束==========================")  
}  
  
func say() {  
var (  
a = 2  
b = 0  
)  
c := a / b  
log.Println("结果为:", c)  
}

执行结果为

image.png 程序不会往下执行

package main  
  
import (  
"fmt"  
"log"  
)  
  
func main() {  
say()  
fmt.Println("执行结束==========================")  
}  
  
func say() {  
defer func() {  
err := recover()  
if err != nil {  
fmt.Println("err错误信息:", err)  
}  
}()  
var (  
a = 2  
b = 0  
)  
c := a / b  
log.Println("结果为:", c)  
}

执行结果为 image.png 程序可以继续往下执行

总结

合理使用recover()可以有利于程序执行,而且要注意的是recover只能捕获同一goroutine内发生的panic