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
}