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, } }