35 lines
710 B
Go
35 lines
710 B
Go
package errs
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// ValidationError 用于收集多个字段错误,同时实现 error 接口
|
|
type ValidationError struct {
|
|
Errors map[string]string // key: 字段名, value: 错误信息
|
|
}
|
|
|
|
// Error 实现 error 接口
|
|
func (v *ValidationError) Error() string {
|
|
if len(v.Errors) == 0 {
|
|
return ""
|
|
}
|
|
|
|
msgs := make([]string, 0, len(v.Errors))
|
|
for field, msg := range v.Errors {
|
|
msgs = append(msgs, fmt.Sprintf("%s: %s", field, msg))
|
|
}
|
|
return strings.Join(msgs, "; ")
|
|
}
|
|
|
|
// NewValidationError 创建多字段的 ValidationError
|
|
func NewValidationError(errors map[string]string) error {
|
|
if len(errors) == 0 {
|
|
return nil
|
|
}
|
|
return &ValidationError{
|
|
Errors: errors,
|
|
}
|
|
}
|