有一次事故现场,在紧急恢复后,他正在排查代码,查了好一会。我回头一看,这错误提醒很明显就是致命错误,较好定位。
但此时,他竟然在查 panic-recover 是不是哪里漏了,我表示大受震惊...
今天就由煎鱼给大家分享一下错误类型有哪几种,又在什么场景下会触发。
错误类型
error
第一种是 Go 中最标准的 error 错误,其真身是一个 interface{}。
如下:
type error interface {
Error() string
}
复制代码
在日常工程中,我们只需要创建任意结构体,实现了 Error 方法,就可以认为是 error 错误类型。
如下:
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
复制代码
在外部调用标准库 API,一般如下:
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
// do something with the open *File f
复制代码
我们会约定最后一个参数为 error 类型,一般常见于第二个参数,可以有个约定俗成的习惯。
panic
第二种是 Go 中的异常处理 panic,能够产生异常错误,结合 panic+recover 可以扭转程序的运行状态。
如下