package cerror import ( "fmt" ) type Error struct { code *Code msg string kv map[string]interface{} } func (e *Error) Code() *Code { return e.code } func (e *Error) Error() string { return fmt.Sprintf("%s:%s", e.code, e.msg) } func (e *Error) KV(k string, v interface{}) { e.kv[k] = v } func New(code *Code, message string) *Error { e := &Error{ code: code, msg: message, kv: make(map[string]interface{}), } return e }