目的:有时候我们error 想带一些额外的信息,例如code码等
package errno
var OK = &Errno{Code: 0, Message: "success"}
type Errno struct {
Code int32
Message string
}
func (c *Errno) Error() string { // 实现接口
return c.Message
}
func NewErr(code int32,Message string ) error {
return &Errno{
Code:code,
Message:Message,
}
}
func DecodeErr(err error) (int32, string) {
if err == nil {
return OK.Code, OK.Message
}
switch typed := err.(type) {
case *Errno:
return typed.Code, typed.Message
default:
return 1001, err.Error()
}
}
使用如下
package main
import (
"log"
"my_error/errno"
)
func main() {
err := errno.NewErr(1000,"失败了")
code,msg := errno.DecodeErr(err)
log.Println(code,msg)
}
输出:
2022/05/07 13:26:08 1000 失败了