Package validator implements value validation for struct fields.
The package was a fork of go-validator but was rewritten to:
- Reduce unneccesary memory allocations
- Support Slice/Array, Map, Interface,
- Simplify source code.
go get -u github.com/goburrow/validator
package main
import (
"errors""fmt""github.com/goburrow/validator"
)
typeUserstruct {
Namestring`valid:"notempty"`Ageint`valid:"min=13"`Addresses []*Address`valid:"min=1,max=2"`
}
typeAddressstruct {
Line1stringLine2stringPostCodeint`valid:"min=1"`Countrystring`valid:"notempty,max=2"`
}
func (a*Address) Validate() error {
ifa.Line1==""&&a.Line2=="" {
returnerrors.New("Either address Line1 or Line2 must be set")
}
returnnil
}
funcmain() {
u:=&User{
Addresses: []*Address{
&Address{
Line1: "Somewhere",
PostCode: 1000,
Country: "AU",
},
&Address{
PostCode: -1,
Country: "US",
},
&Address{
Line2: "Here",
PostCode: 1,
Country: "USA",
},
},
}
v:=validator.Default()
fmt.Println(v.Validate(u))
// Output:// Name must not be empty,// Age must not be less than 13 (was 0),// Addresses must have length not greater than 2 (was 3),// Either address Line1 or Line2 must be set,// PostCode must not be less than 1 (was -1),// Country must have length not greater than 2 (was 3)
}