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
| Tag | Message |
|---|---|
required | Field is required |
email | Field must be a valid email |
min=N | Field is too short (min N) |
max=N | Field is too long (max N) |
len=N | Field must be exactly N characters |
numeric | Field must be a number |
url | Field must be a valid URL |
oneof=a b | Field 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"`
}