Packages

validator

Struct validation powered by go-playground/validator v10 with human-readable field error messages and custom rule registration.


Basic usage

import "github.com/BounkhongDev/bkgo/validator"

type CreateUserInput struct {
    Name  string `validate:"required,min=2"`
    Email string `validate:"required,email"`
    Age   int    `validate:"min=18"`
}

func (h *UserHandler) Create(c *fiber.Ctx) error {
    var input CreateUserInput
    c.BodyParser(&input)

    if errs := validator.Validate(input); errs != nil {
        return c.Status(422).JSON(response.Error("VALIDATION_FAILED", errs))
    }
    // ...
}

Returns nil if valid, or a slice of FieldError describing each failure.


FieldError shape

// JSON response for a validation failure:
{
    "success": false,
    "error": "VALIDATION_FAILED",
    "message": [
        { "field": "Name",  "message": "Name is required" },
        { "field": "Email", "message": "Email must be a valid email" },
        { "field": "Age",   "message": "Age is too short (min 18)" }
    ]
}

Supported tags

TagMessage
requiredField is required
emailField must be a valid email
min=NField is too short (min N)
max=NField is too long (max N)
len=NField must be exactly N characters
numericField must be a number
urlField must be a valid URL
oneof=a bField must be one of: a b

Custom rules

// Register once at startup (e.g. in main.go)
validator.RegisterTag("lao_phone", func(fl validator.FieldLevel) bool {
    return strings.HasPrefix(fl.Field().String(), "020")
})

// Use in structs
type CreateContactInput struct {
    Phone string `validate:"required,lao_phone"`
}