mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-13 09:50:00 +08:00
refactor: simplify BatchError (#4292)
This commit is contained in:
@@ -5,17 +5,13 @@ import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type (
|
||||
// A BatchError is an error that can hold multiple errors.
|
||||
BatchError struct {
|
||||
errs errorArray
|
||||
lock sync.Mutex
|
||||
}
|
||||
// BatchError is an error that can hold multiple errors.
|
||||
type BatchError struct {
|
||||
errs []error
|
||||
lock sync.RWMutex
|
||||
}
|
||||
|
||||
errorArray []error
|
||||
)
|
||||
|
||||
// Add adds errs to be, nil errors are ignored.
|
||||
// Add adds one or more non-nil errors to the BatchError instance.
|
||||
func (be *BatchError) Add(errs ...error) {
|
||||
be.lock.Lock()
|
||||
defer be.lock.Unlock()
|
||||
@@ -27,35 +23,20 @@ func (be *BatchError) Add(errs ...error) {
|
||||
}
|
||||
}
|
||||
|
||||
// Err returns an error that represents all errors.
|
||||
// Err returns an error that represents all accumulated errors.
|
||||
// It returns nil if there are no errors.
|
||||
func (be *BatchError) Err() error {
|
||||
be.lock.Lock()
|
||||
defer be.lock.Unlock()
|
||||
be.lock.RLock()
|
||||
defer be.lock.RUnlock()
|
||||
|
||||
switch len(be.errs) {
|
||||
case 0:
|
||||
return nil
|
||||
case 1:
|
||||
return be.errs[0]
|
||||
default:
|
||||
return be.errs
|
||||
}
|
||||
// If there are no non-nil errors, errors.Join(...) returns nil.
|
||||
return errors.Join(be.errs...)
|
||||
}
|
||||
|
||||
// NotNil checks if any error inside.
|
||||
// NotNil checks if there is at least one error inside the BatchError.
|
||||
func (be *BatchError) NotNil() bool {
|
||||
be.lock.Lock()
|
||||
defer be.lock.Unlock()
|
||||
be.lock.RLock()
|
||||
defer be.lock.RUnlock()
|
||||
|
||||
return len(be.errs) > 0
|
||||
}
|
||||
|
||||
// Error returns a string that represents inside errors.
|
||||
func (ea errorArray) Error() string {
|
||||
return errors.Join(ea...).Error()
|
||||
}
|
||||
|
||||
// Unwrap combine the errors in the errorArray into a single error return
|
||||
func (ea errorArray) Unwrap() error {
|
||||
return errors.Join(ea...)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user