Skip to content

错误处理

错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。

定义错误

go错误的底层结构

go
type error interface {
    Error() string
}
  • 自定义一个错误
go
//1.先顶一个自定义错误结构
type CodeError struct {
	Code    int
	Message string
	Data    interface{}
}
//2.实现error接口的方法Error
func (c *CodeError) Error() string {
	return c.Message
}

func main() {
	//3.可以使用定义错误了
	var err1 error = &CodeError{Code: 0, Message: "test", Data: nil}
	fmt.Println(err1)
}

错误接收

go
//方式1 变量接收
file, err := os.Open("a.txt")
fmt.Println(file, err)
//方式2 忽略错误
file, _ := os.Open("a.txt")
fmt.Println(file)

收集错误

  • 有些错误程序可能看不出,超过临界值才会出现。
  • 所以需要recover()来捕获错误。
go
func devide() {
    //defer 等函数执行完毕再执行
	defer func() {
        //recover() //捕获异常错误
		err := recover()
		if err != nil {
			fmt.Println("devide()错误", err)
		}
	}()
	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println(result)
}