修订代码,注释,示例

This commit is contained in:
hahahrfool
2022-03-29 21:58:23 +08:00
parent b63b90400a
commit 01d681f14f
7 changed files with 99 additions and 80 deletions

View File

@@ -12,7 +12,7 @@ type NumErr struct {
Prefix string
}
func (ne *NumErr) Error() string {
func (ne NumErr) Error() string {
return ne.Prefix + strconv.Itoa(ne.N)
}
@@ -23,57 +23,51 @@ type ErrFirstBuffer struct {
First *bytes.Buffer
}
func (ef *ErrFirstBuffer) Unwarp() error {
func (ef ErrFirstBuffer) Unwarp() error {
return ef.Err
}
func (ef *ErrFirstBuffer) Error() string {
func (ef ErrFirstBuffer) Error() string {
return ef.Err.Error()
}
func NewErr(desc string, e error) *ErrInErr {
return &ErrInErr{
// 返回结构体,而不是指针, 这样可以避免内存逃逸到堆
func NewErr(desc string, e error) ErrInErr {
return ErrInErr{
ErrDesc: desc,
ErrDetail: e,
}
}
func NewDataErr(desc string, e error, data interface{}) *ErrInErr {
return &ErrInErr{
// 返回结构体,而不是指针, 这样可以避免内存逃逸到堆
func NewDataErr(desc string, e error, data interface{}) ErrInErr {
return ErrInErr{
ErrDesc: desc,
ErrDetail: e,
Data: data,
}
}
// ErrInErr 很适合一个err包含另一个err并且提供附带数据的情况
// ErrInErr 很适合一个err包含另一个err并且提供附带数据的情况.
type ErrInErr struct {
ErrDesc string
ErrDetail error
Data any
cachedStr string
}
func (e *ErrInErr) Error() string {
func (e ErrInErr) Error() string {
return e.String()
}
func (e *ErrInErr) Unwarp() error {
func (e ErrInErr) Unwarp() error {
return e.ErrDetail
}
func (e *ErrInErr) String() string {
if e.cachedStr == "" {
e.cachedStr = e.string()
}
return e.cachedStr
}
func (e ErrInErr) String() string {
func (e *ErrInErr) string() string {
if e.Data != nil {
if e.ErrDetail != nil {