包作用
实现了创建error类型错误值的函数
error类型的实现
实际上error类型是一个底层接口,
type error interface {
Error() string
}
需要注意是,fmt包中涉及格式输出的,在输出一个error类型值的内容的时候,就是调用Error()方法,输出Error方法的返回值
创建error错误值的方式
一种是通过errors包的New方法
err := errors.New("abc")
一种是通过fmt包的Errorf方法
err := fmt.Errorf("abc")
自定义错误输出
上面说到error类型其实是一个接口,那么只要我们自己定义的结构体实现了该方法,就可以定义自己的错误输出了
type MyError struct {
When time.Time
What string
}
func (e MyError) Error() string {
return fmt.Sprintf("%v: %v", e.When, e.What)
}
func oops() error {
return MyError{
time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC),
"the file system has gone away",
}
}
if err := oops(); err != nil {
fmt.Println(err)
}
// Output: 1989-03-15 22:30:00 +0000 UTC: the file system has gone away