valigo(Validation Go Lang) adalah modul validasi input berbasis go-playground/validator yang dirancang khusus untuk aplikasi backend Go (Gin).
Modul ini menyederhanakan validasi request JSON, memberikan error yang user friendly, serta mendukung validasi custom dan pelacakan input sebelumnya (old).
- Validasi otomatis input JSON (
ValigoJSON) - Validasi logika bisnis (
ValigoBusiness) - Error message dalam Bahasa Indonesia
- Mendukung
Sanitizableuntukold input - Mendukung custom validator tag
- Bisa di-inject ke handler controller
go get github.com/gogaruda/valigo@v1.0.2valigo/
├── valigo.go # Fungsi utama validasi
├── message.go # Pesan error terstruktur
├── reflect_helper.go # Ambil nama field dari tag JSON
import "github.com/your-org/valigo"
valigo := valigo.NewValigo()v := validator.New()
v.RegisterValidation("even", func(fl validator.FieldLevel) bool {
num := fl.Field().Int()
return num%2 == 0
})
valigo := valigo.NewCustomValigo(v)type RegisterInput struct {
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=6"`
Age int `json:"age" validate:"required,even"`
}
func (r *RegisterInput) Sanitize() map[string]any {
return map[string]any{
"email": r.Email,
"age": r.Age,
}
}func (h *UserHandler) Register(c *gin.Context) {
var input RegisterInput
if !h.valigo.ValigoJSON(c, &input) {
return
}
// lanjut proses register
}errMap := map[string]string{
"email": "Email sudah digunakan",
}
if !h.valigo.ValigoBusiness(c, input, errMap) {
return
}{
"code": 400,
"status": "error",
"message": "Validasi gagal",
"errors": {
"email": "Kolom email harus berupa email yang valid",
"age": "Kolom age harus berupa angka genap"
},
"old": {
"email": "user@example.com",
"age": 31
}
}v := validator.New()
v.RegisterValidation("even", func(fl validator.FieldLevel) bool {
return fl.Field().Int()%2 == 0
})Lalu gunakan di tag:
Age int `validate:"required,even"`- Gunakan
Sanitizableagar input lama dikirim kembali saat error - Pisahkan error: validasi teknis (
ValigoJSON) dan bisnis (ValigoBusiness) - Inject
valigo.Valigoke semua handler controller