错误处理
Go语言的错误设计是通过返回值的方式来让调用者对错误进行处理,通常我们的处理是对error类型的返回值进行if判断
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
~~~
Error
error其实是一个接口类型,接口当中只有一个方法,并且该方法返回的是一个字符串
type error interface {
Error() string
}
~~~
实现了error接口便自定义了error类型
type DBError struct {
}
func (dbError *DBError) Error() string {
return "数据库错误"
}
~~~
当我们使用定义的DBError进行错误的返回之后便会打印“数据库错误”的信息。如果想让我们的错误在使用的时候更自由附带信息的话可以再自定义的结构体中定义字段,比如:
type DBError struct {
s string
}
func (dbError *DBError) Error() string {
return dbError.s
}
存在的问题
经过上面的自定义之后,我们可以让error附带我们想要的信息,但是对于开发者还是不够的,我们有可能需要知道出错的更多信息,哪个文件中的哪一