Golang错误处理机制(error 与 panic)

2023年1月14日09:28:50

一、概述

Go语言并没有像Java那样的try catch finally 的处理机制,而是提供了其特有的错误处理机制。在Go语言中,错误或异常分为error和panic两种,error一般是程序员可预知的,会进行合适的处理,例如检测输入是否合法等。而panic是程序员无法预知的异常,例如空指针或数组越界等。

二、error

Go 提供了两种创建error的方法,分别是:
errors.New
fmt.Errorf

package main

import (
	"errors"
	"fmt"
)

func main() {
	res1, err1 := div(1, 1)
	fmt.Println(res1, err1)

	res2, err2 := div(1, 0)
	fmt.Println(res2, err2)
	
	//返回一个error
	e := fmt.Errorf("自定义error")
	fmt.Println(e)
}

func div(n, m int) (int, error) {
	if m == 0 {
		return 0, errors.New("0不能作为分母")
	}
	return m / n, nil
}

运行结果如下
Golang错误处理机制(error 与 panic)

三、panic

一般在没有recover的情况下panic会导致程序崩溃,panic,defer和recover经常同时出现,用于异常处理,下面是panic异常处理的示例。

package main

import "fmt"

func main() {
	//注册捕获panic的函数,必须先注册,若在panic之后则无效
	defer doPanic()
	n := 0
	res := 1 / n
	fmt.Println(res) //panic 之后的代码不会执行
}

//当捕获到panic时触发此函数
func doPanic() {
	err := recover()
	if err != nil {
		fmt.Println("捕获到panic")
	}
}

注意在Go语言中,recover只在defer调用的函数中有效,并且defer要在panic之前先注册,否则不能捕获异常。当panic被捕获到后,被注册的函数将获得程序控制权

  • 作者:Marvellous丶
  • 原文链接:https://blog.csdn.net/baolingye/article/details/110879023
    更新时间:2023年1月14日09:28:50 ,共 860 字。