Gody
:balloon: A lightweight struct validator for Go
Install / Use
/learn @guiferpa/GodyREADME
gody
Go versions supported
Installation
go get github.com/guiferpa/gody/v2
Usage
package main
import (
"encoding/json"
"fmt"
"net/http"
gody "github.com/guiferpa/gody/v2"
"github.com/guiferpa/gody/v2/rule"
)
type RequestBody struct {
Name string `json:"name" validate:"not_empty"`
Age int `json:"age" validate:"min=21"`
}
func HTTPHandler(v *gody.Validator) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var body RequestBody
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
// ...
}
defer r.Body.Close()
if isValidated, err := v.Validate(body); err != nil {
// ...
}
})
}
func main() {
validator := gody.NewValidator()
validator.AddRules(rule.NotEmpty, rule.Min)
port := ":3000"
http.ListenAndServe(port, HTTPHandler(validator))
}
Others ways for validation
There are others ways to valid a struct, take a look on functions below:
- RawValidate - It's a function that make validate with no rule, it's necessary put the struct for validation, some rule(s) and tag name.
gody.RawValidate(interface{}, string, []gody.Rule) (bool, error)
- Validate - It's a function that make validate with no rule, it's necessary put the struct for validation and some rule(s).
gody.Validate(interface{}, []gody.Rule) (bool, error)
- RawDefaultValidate - It's a function that already have built-in rules configured, it's necessary put the struct for validation, tag name and optional custom rule(s).
gody.RawDefaultValidate(interface{}, string, []gody.Rule) (bool, error)
- DefaultValidate - It's a function that already have built-in rules configured, it's necessary put the struct for validation and optional custom rule(s).
gody.DefaultValidate(interface{}, []gody.Rule) (bool, error)
Dynamic Enum Validation (No Duplication)
You can avoid duplicating enum values in struct tags by using dynamic parameters:
const (
StatusCreated = "__CREATED__"
StatusPending = "__PENDING__"
StatusDoing = "__DOING__"
StatusDone = "__DONE__"
)
type Task struct {
Name string `json:"name"`
Status string `json:"status" validate:"enum={status}"`
}
validator := gody.NewValidator()
validator.AddRuleParameters(map[string]string{
"status": fmt.Sprintf("%s,%s,%s,%s", StatusCreated, StatusPending, StatusDoing, StatusDone),
})
validator.AddRules(rule.Enum)
// Now you can validate Task structs without duplicating enum values in the tag!
Contribution policies
- At this time the only policy is don't create a Pull Request directly, it's necessary some discussions for some implementation then open an issue before to dicussion anything about the project.
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
344.1kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
