go-error
要点
error是一个预定义的interface1
2
3type error interface {
Error() string
}最常用的一个实现是
errors中的errorString1
errors.New("error message")
在
fmt包中,通过反射得知是error类型时,则调用error() string方法在
fmt包中,提供了Errorf(format string, a ...interface{}) error来方便错误信息输出在精细化的情况下(调用者需要知道错误(该错误是重新定义的的,包含其他信息)的详细信息,不只是错误字符串),
这时可以通过类型断言来单独处理指定错误1
2
3
4
5
6
7if err := dec.Decode(&val); err != nil {
if serr, ok := err.(*json.SyntaxError); ok {
line, col := findLine(f, serr.Offset)
return fmt.Errorf("%s:%d:%d: %v", f.Name(), line, col, err)
}
return err
}1
2
3
4
5
6
7
8
9
10
_, err := my.DB.Exec(sql)
if err != nil {
if driverErr, ok := err.(*mysql.MySQLError); ok { // Now the error number is accessible directly
if driverErr.Number == 1062 {
return errDuplicate
}
}
return &json2.Error{Code: 100, Message: "a"}
}