validgo

Validation for Golang.
validgo helps simplify request parsing and validation in Go by wrapping go-playground/validator with a cleaner developer experience.
Features
- Request body parsing
- Automatic validation
- Automatic JSON validation response
- Generic typed request parsing
- Clean Fiber integration
- Built on top of go-playground/validator
Installation
go get github.com/MRizki28/validgo
Install validgo CLI:
go install github.com/MRizki28/validgo/cmd/validgo@latest
Make sure your Go binary path is added to PATH:
export PATH=$PATH:$(go env GOPATH)/bin
CLI Commands
Generate Request
validgo make:request RegisterUser
Generated file:
app/requests/register_user_request.go
Quick Start
Request Struct
package main
type RegisterRequest struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=6"`
}
Example
package main
import (
"github.com/MRizki28/validgo"
"github.com/gofiber/fiber/v2"
)
func Register(c *fiber.Ctx) error {
body, err := validgo.Parse[RegisterRequest](c)
if err != nil {
if valErr, ok := err.(*validgo.ValidationError); ok {
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{
"status": false,
"message": "validation failed",
"errors": valErr.Errors,
})
}
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"status": false,
"message": err.Error(),
})
}
return c.JSON(fiber.Map{
"status": true,
"data": body,
})
}
Validation Error Response
{
"status": false,
"message": "validation failed",
"errors": {
"email": [
"email must be a valid email"
],
"name": [
"name is required"
]
}
}
Invalid Body Response
{
"status": false,
"message": "invalid request body"
}
Example
go run examples/fiber/main.go
Testing
Run tests:
go test -v ./...
Roadmap
- Custom validation messages
- Localization support
- Database unique validation
- Snake case field formatter
- Gin support
- Echo support
- Query validation
- Form-data validation
License
MIT
Author
Muhammad Rizki