Neo's Go Struct Validator is a simple validator built on the core of OAS Specification. The validator is heavily inspired by the OAS Specification approach leading to the creation of structs in a generic manner.
The validator covers the specifications, and its respective validations according to OAS.
go get github.com/neo7337/go-struct-validator
go test -run=Bench -bench=. -benchtime 5000000x
S.No. | Name | Ops | BenchResult |
---|---|---|---|
1 | BenchmarkValidator-8 | 5000000 | 849 ns/op |
1 | BenchmarkValidatorParallel-8 | 5000000 | 268 ns/op |
It comes with a simple usage as explained below, just import the package, and you are good to go.
To add check for validations, add the constraints
tag in the struct fields or configure a one of your desire using
package main
import (
"fmt"
"github.com/neo7337/go-struct-validator"
)
var sv = validator.NewStructValidator()
type TestStruct struct {
Name string `json:"name" constraints:"min-length=5"`
Age int `json:"age" constraints:"min=21"`
Description string `json:"description" constraints:"max-length=50"`
Cost float64 `json:"cost" constraints:"exclusiveMin=200"`
ItemCount int `json:"itemCount" constraints:"multipleOf=5"`
}
func main() {
msg := TestStruct{
Name: "Test",
Age: 25,
Description: "this is bench testing",
Cost: 299.9,
ItemCount: 2000,
}
if err := sv.Validate(msg); err != nil {
fmt.Errorf(err)
}
}
S.No. | Name | Data Type Supported | Status |
---|---|---|---|
4 | min | numeric | ✅ |
5 | max | numeric | ✅ |
6 | exclusiveMin | numeric | ✅ |
7 | exclusiveMax | numeric | ✅ |
8 | multipleOf | numeric | ✅ |
9 | max-length | string | ✅ |
10 | min-length | string | ✅ |
11 | pattern | string | ✅ |
11 | notnull | string | ✅ |
12 | enum | all | ✅ |
We welcome contributions to the project. If you find a bug or would like to request a new feature, please open an issue on GitHub.