package utils import ( "fmt" "strconv" ) type ErrorWithCode struct { level int str string code string intCode int } func NewErrorCode(err, code string, level ...int) *ErrorWithCode { retVal := &ErrorWithCode{ str: err, code: code, } retVal.intCode, _ = strconv.Atoi(code) if len(level) > 0 { retVal.level = level[0] } return retVal } func NewErrorIntCode(err string, code int, level ...int) *ErrorWithCode { return NewErrorCode(err, Int2Str(code), level...) } func (e *ErrorWithCode) Error() string { return fmt.Sprintf("%s level:%d, code:%s", e.str, e.level, e.code) } func (e *ErrorWithCode) String() string { return e.Error() } func (e *ErrorWithCode) Level() int { return e.level } func (e *ErrorWithCode) Code() string { return e.code } func (e *ErrorWithCode) IntCode() int { return e.intCode }