go get github.com/guiferpa/gody/v2
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))
}
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)
- 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.