错误处理

error接口

golang中定义了错误接口error,其中包含了错误方法Error() string,可以通过内置包errors中的NewError()方法创建一个错误

例子:引发一个错误

package main

import (
	"errors"
	"fmt"
)

func main() {
	// 调用一个会返回错误的方法,判断err是否为空,非空则输出错误
	if err := BadFunc(); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println("everything is fine")
	}
}

func BadFunc() error {
	// 通过errors.New()方法创建并返回一个错误
	return errors.New("a bad error")
}

以上代码的执行结果:

自定义错误

只要实现了Error() string方法,就可以做为错误接口的传递参数,引发自定义的错误

例子:自定义错误

以上代码的执行结果:

例子:错误类型推断

以上代码的执行结果:

panic

除了通过error接口报普通错误外,在一些比较严重的场合可以用内置的panic()方法引发一个运行时错误,运行时错误会在方法中逐层往上传递,直到去到main()方法中,引起程序的错误退出

引发错误

例子:引发panic错误

以上代码的运行结果:

错误处理

在一些代码库中,发送严重错误后会引发panic()导致程序退出,当已经有办法处理这个错误时,我们不希望程序退出而是将其做为普通错误处理,这时就需要能够拦截panic()错误的传递。可以通过内置的recover()方法结合延迟执行defer,实现对于panic()的错误处理

例子:错误处理

以上代码运行结果:

最后更新于