ValidateSignup returning field-level error map
Go
package validate
import (
"errors"
"fmt"
"net/mail"
"strings"
)
// Signup is a request payload that must pass validation.
type Signup struct {
Name string
Email string
Age int
}
// Validate checks each field and returns errors keyed by field name.
func Validate(s Signup) map[string]error {
errs := make(map[string]error)
if strings.TrimSpace(s.Name) == "" {
errs["name"] = errors.New("name is required")
} else if len(s.Name) > 80 {
errs["name"] = fmt.Errorf("name must be at most 80 bytes, got %d", len(s.Name))
}
if _, err := mail.ParseAddress(s.Email); err != nil {
errs["email"] = errors.New("email is not a valid address")
}
if s.Age < 18 || s.Age > 120 {
errs["age"] = fmt.Errorf("age must be between 18 and 120, got %d", s.Age)
}
return errs
}