README
¶
govalidator
A package of validators and sanitizers for strings, structs and collections. Based on validator.js.
Installation
Make sure that Go is installed on your computer. Type the following command in your terminal:
go get github.com/trhacknon/govalidator
or you can get specified release of the package with gopkg.in
:
go get gopkg.in/trhacknon/govalidator.v10
After it the package is ready to use.
Import package in your project
Add following line in your *.go
file:
import "github.com/trhacknon/govalidator"
If you are unhappy to use long govalidator
, you can do something like this:
import (
valid "github.com/trhacknon/govalidator"
)
Activate behavior to require all fields have a validation tag by default
SetFieldsRequiredByDefault
causes validation to fail when struct fields do not include validations or are not explicitly marked as exempt (using valid:"-"
or valid:"email,optional"
). A good place to activate this is a package init function or the main() function.
SetNilPtrAllowedByRequired
causes validation to pass when struct fields marked by required
are set to nil. This is disabled by default for consistency, but some packages that need to be able to determine between nil
and zero value
state can use this. If disabled, both nil
and zero
values cause validation errors.
import "github.com/trhacknon/govalidator"
func init() {
govalidator.SetFieldsRequiredByDefault(true)
}
Here's some code to explain it:
// this struct definition will fail govalidator.ValidateStruct() (and the field values do not matter):
type exampleStruct struct {
Name string ``
Email string `valid:"email"`
}
// this, however, will only fail when Email is empty or an invalid email address:
type exampleStruct2 struct {
Name string `valid:"-"`
Email string `valid:"email"`
}
// lastly, this will only fail when Email is an invalid email address but not when it's empty:
type exampleStruct2 struct {
Name string `valid:"-"`
Email string `valid:"email,optional"`
}
Recent breaking changes (see #123)
A context was added as the second parameter, for structs this is the object being validated – this makes dependent validation possible.
import "github.com/trhacknon/govalidator"
// old signature
func(i interface{}) bool
// new signature
func(i interface{}, o interface{}) bool
This was changed to prevent data races when accessing custom validators.
import "github.com/trhacknon/govalidator"
// before
govalidator.CustomTypeTagMap["customByteArrayValidator"] = func(i interface{}, o interface{}) bool {
// ...
}
// after
govalidator.CustomTypeTagMap.Set("customByteArrayValidator", func(i interface{}, o interface{}) bool {
// ...
})
List of functions:
func Abs(value float64) float64
func BlackList(str, chars string) string
func ByteLength(str string, params ...string) bool
func CamelCaseToUnderscore(str string) string
func Contains(str, substring string) bool
func Count(array []interface{}, iterator ConditionIterator) int
func Each(array []interface{}, iterator Iterator)
func ErrorByField(e error, field string) string
func ErrorsByField(e error) map[string]string
func Filter(array []interface{}, iterator ConditionIterator) []interface{}
func Find(array []interface{}, iterator ConditionIterator) interface{}
func GetLine(s string, index int) (string, error)
func GetLines(s string) []string
func HasLowerCase(str string) bool
func HasUpperCase(str string) bool
func HasWhitespace(str string) bool
func HasWhitespaceOnly(str string) bool
func InRange(value interface{}, left interface{}, right interface{}) bool
func InRangeFloat32(value, left, right float32) bool
func InRangeFloat64(value, left, right float64) bool
func InRangeInt(value, left, right interface{}) bool
func IsASCII(str string) bool
func IsAlpha(str string) bool
func IsAlphanumeric(str string) bool
func IsBase64(str string) bool
func IsByteLength(str string, min, max int) bool
func IsCIDR(str string) bool
func IsCRC32(str string) bool
func IsCRC32b(str string) bool
func IsCreditCard(str string) bool
func IsDNSName(str string) bool
func IsDataURI(str string) bool
func IsDialString(str string) bool
func IsDivisibleBy(str, num string) bool
func IsEmail(str string) bool
func IsExistingEmail(email string) bool
func IsFilePath(str string) (bool, int)
func IsFloat(str string) bool
func IsFullWidth(str string) bool
func IsHalfWidth(str string) bool
func IsHash(str string, algorithm string) bool
func IsHexadecimal(str string) bool
func IsHexcolor(str string) bool
func IsHost(str string) bool
func IsIP(str string) bool
func IsIPv4(str string) bool
func IsIPv6(str string) bool
func IsISBN(str string, version int) bool
func IsISBN10(str string) bool
func IsISBN13(str string) bool
func IsISO3166Alpha2(str string) bool
func IsISO3166Alpha3(str string) bool
func IsISO4217(str string) bool
func IsISO693Alpha2(str string) bool
func IsISO693Alpha3b(str string) bool
func IsIn(str string, params ...string) bool
func IsInRaw(str string, params ...string) bool
func IsInt(str string) bool
func IsJSON(str string) bool
func IsLatitude(str string) bool
func IsLongitude(str string) bool
func IsLowerCase(str string) bool
func IsMAC(str string) bool
func IsMD4(str string) bool
func IsMD5(str string) bool
func IsMagnetURI(str string) bool
func IsMongoID(str string) bool
func IsMultibyte(str string) bool
func IsNatural(value float64) bool
func IsNegative(value float64) bool
func IsNonNegative(value float64) bool
func IsNonPositive(value float64) bool
func IsNotNull(str string) bool
func IsNull(str string) bool
func IsNumeric(str string) bool
func IsPort(str string) bool
func IsPositive(value float64) bool
func IsPrintableASCII(str string) bool
func IsRFC3339(str string) bool
func IsRFC3339WithoutZone(str string) bool
func IsRGBcolor(str string) bool
func IsRegex(str string) bool
func IsRequestURI(rawurl string) bool
func IsRequestURL(rawurl string) bool
func IsRipeMD128(str string) bool
func IsRipeMD160(str string) bool
func IsRsaPub(str string, params ...string) bool
func IsRsaPublicKey(str string, keylen int) bool
func IsSHA1(str string) bool
func IsSHA256(str string) bool
func IsSHA384(str string) bool
func IsSHA512(str string) bool
func IsSSN(str string) bool
func IsSemver(str string) bool
func IsTiger128(str string) bool
func IsTiger160(str string) bool
func IsTiger192(str string) bool
func IsTime(str string, format string) bool
func IsType(v interface{}, params ...string) bool
func IsURL(str string) bool
func IsUTFDigit(str string) bool
func IsUTFLetter(str string) bool
func IsUTFLetterNumeric(str string) bool
func IsUTFNumeric(str string) bool
func IsUUID(str string) bool
func IsUUIDv3(str string) bool
func IsUUIDv4(str string) bool
func IsUUIDv5(str string) bool
func IsULID(str string) bool
func IsUnixTime(str string) bool
func IsUpperCase(str string) bool
func IsVariableWidth(str string) bool
func IsWhole(value float64) bool
func LeftTrim(str, chars string) string
func Map(array []interface{}, iterator ResultIterator) []interface{}
func Matches(str, pattern string) bool
func MaxStringLength(str string, params ...string) bool
func MinStringLength(str string, params ...string) bool
func NormalizeEmail(str string) (string, error)
func PadBoth(str string, padStr string, padLen int) string
func PadLeft(str string, padStr string, padLen int) string
func PadRight(str string, padStr string, padLen int) string
func PrependPathToErrors(err error, path string) error
func Range(str string, params ...string) bool
func RemoveTags(s string) string
func ReplacePattern(str, pattern, replace string) string
func Reverse(s string) string
func RightTrim(str, chars string) string
func RuneLength(str string, params ...string) bool
func SafeFileName(str string) string
func SetFieldsRequiredByDefault(value bool)
func SetNilPtrAllowedByRequired(value bool)
func Sign(value float64) float64
func StringLength(str string, params ...string) bool
func StringMatches(s string, params ...string) bool
func StripLow(str string, keepNewLines bool) string
func ToBoolean(str string) (bool, error)
func ToFloat(str string) (float64, error)
func ToInt(value interface{}) (res int64, err error)
func ToJSON(obj interface{}) (string, error)
func ToString(obj interface{}) string
func Trim(str, chars string) string
func Truncate(str string, length int, ending string) string
func TruncatingErrorf(str string, args ...interface{}) error
func UnderscoreToCamelCase(s string) string
func ValidateMap(inputMap map[string]interface{}, validationMap map[string]interface{}) (bool, error)
func ValidateStruct(s interface{}) (bool, error)
func WhiteList(str, chars string) string
type ConditionIterator
type CustomTypeValidator
type Error
func (e Error) Error() string
type Errors
func (es Errors) Error() string
func (es Errors) Errors() []error
type ISO3166Entry
type ISO693Entry
type InterfaceParamValidator
type Iterator
type ParamValidator
type ResultIterator
type UnsupportedTypeError
func (e *UnsupportedTypeError) Error() string
type Validator
Examples
println(govalidator.IsURL(`http://user@pass:domain.com/path/page`))
println(govalidator.IsType("Bob", "string"))
println(govalidator.IsType(1, "int"))
i := 1
println(govalidator.IsType(&i, "*int"))
IsType can be used through the tag type
which is essential for map validation:
type User struct {
Name string `valid:"type(string)"`
Age int `valid:"type(int)"`
Meta interface{} `valid:"type(string)"`
}
result, err := govalidator.ValidateStruct(User{"Bob", 20, "meta"})
if err != nil {
println("error: " + err.Error())
}
println(result)
type User struct {
FirstName string
LastName string
}
str := govalidator.ToString(&User{"John", "Juan"})
println(str)
Each iterates over the slice/array and calls Iterator for every item
data := []interface{}{1, 2, 3, 4, 5}
var fn govalidator.Iterator = func(value interface{}, index int) {
println(value.(int))
}
govalidator.Each(data, fn)
data := []interface{}{1, 2, 3, 4, 5}
var fn govalidator.ResultIterator = func(value interface{}, index int) interface{} {
return value.(int) * 3
}
_ = govalidator.Map(data, fn) // result = []interface{}{1, 6, 9, 12, 15}
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var fn govalidator.ConditionIterator = func(value interface{}, index int) bool {
return value.(int)%2 == 0
}
_ = govalidator.Filter(data, fn) // result = []interface{}{2, 4, 6, 8, 10}
_ = govalidator.Count(data, fn) // result = 5
If you want to validate structs, you can use tag valid
for any field in your structure. All validators used with this field in one tag are separated by comma. If you want to skip validation, place -
in your tag. If you need a validator that is not on the list below, you can add it like this:
govalidator.TagMap["duck"] = govalidator.Validator(func(str string) bool {
return str == "duck"
})
For completely custom validators (interface-based), see below.
Here is a list of available validators for struct fields (validator - used function):
"email": IsEmail,
"url": IsURL,
"dialstring": IsDialString,
"requrl": IsRequestURL,
"requri": IsRequestURI,
"alpha": IsAlpha,
"utfletter": IsUTFLetter,
"alphanum": IsAlphanumeric,
"utfletternum": IsUTFLetterNumeric,
"numeric": IsNumeric,
"utfnumeric": IsUTFNumeric,
"utfdigit": IsUTFDigit,
"hexadecimal": IsHexadecimal,
"hexcolor": IsHexcolor,
"rgbcolor": IsRGBcolor,
"lowercase": IsLowerCase,
"uppercase": IsUpperCase,
"int": IsInt,
"float": IsFloat,
"null": IsNull,
"uuid": IsUUID,
"uuidv3": IsUUIDv3,
"uuidv4": IsUUIDv4,
"uuidv5": IsUUIDv5,
"creditcard": IsCreditCard,
"isbn10": IsISBN10,
"isbn13": IsISBN13,
"json": IsJSON,
"multibyte": IsMultibyte,
"ascii": IsASCII,
"printableascii": IsPrintableASCII,
"fullwidth": IsFullWidth,
"halfwidth": IsHalfWidth,
"variablewidth": IsVariableWidth,
"base64": IsBase64,
"datauri": IsDataURI,
"ip": IsIP,
"port": IsPort,
"ipv4": IsIPv4,
"ipv6": IsIPv6,
"dns": IsDNSName,
"host": IsHost,
"mac": IsMAC,
"latitude": IsLatitude,
"longitude": IsLongitude,
"ssn": IsSSN,
"semver": IsSemver,
"rfc3339": IsRFC3339,
"rfc3339WithoutZone": IsRFC3339WithoutZone,
"ISO3166Alpha2": IsISO3166Alpha2,
"ISO3166Alpha3": IsISO3166Alpha3,
"ulid": IsULID,
Validators with parameters
"range(min|max)": Range,
"length(min|max)": ByteLength,
"runelength(min|max)": RuneLength,
"stringlength(min|max)": StringLength,
"matches(pattern)": StringMatches,
"in(string1|string2|...|stringN)": IsIn,
"rsapub(keylength)" : IsRsaPub,
"minstringlength(int): MinStringLength,
"maxstringlength(int): MaxStringLength,
Validators with parameters for any type
"type(type)": IsType,
And here is small example of usage:
type Post struct {
Title string `valid:"alphanum,required"`
Message string `valid:"duck,ascii"`
Message2 string `valid:"animal(dog)"`
AuthorIP string `valid:"ipv4"`
Date string `valid:"-"`
}
post := &Post{
Title: "My Example Post",
Message: "duck",
Message2: "dog",
AuthorIP: "123.234.54.3",
}
// Add your own struct validation tags
govalidator.TagMap["duck"] = govalidator.Validator(func(str string) bool {
return str == "duck"
})
// Add your own struct validation tags with parameter
govalidator.ParamTagMap["animal"] = govalidator.ParamValidator(func(str string, params ...string) bool {
species := params[0]
return str == species
})
govalidator.ParamTagRegexMap["animal"] = regexp.MustCompile("^animal\\((\\w+)\\)$")
result, err := govalidator.ValidateStruct(post)
if err != nil {
println("error: " + err.Error())
}
println(result)
If you want to validate maps, you can use the map to be validated and a validation map that contain the same tags used in ValidateStruct, both maps have to be in the form map[string]interface{}
So here is small example of usage:
var mapTemplate = map[string]interface{}{
"name":"required,alpha",
"family":"required,alpha",
"email":"required,email",
"cell-phone":"numeric",
"address":map[string]interface{}{
"line1":"required,alphanum",
"line2":"alphanum",
"postal-code":"numeric",
},
}
var inputMap = map[string]interface{}{
"name":"Bob",
"family":"Smith",
"email":"foo@bar.baz",
"address":map[string]interface{}{
"line1":"",
"line2":"",
"postal-code":"",
},
}
result, err := govalidator.ValidateMap(inputMap, mapTemplate)
if err != nil {
println("error: " + err.Error())
}
println(result)
// Remove all characters from string ignoring characters between "a" and "z"
println(govalidator.WhiteList("a3a43a5a4a3a2a23a4a5a4a3a4", "a-z") == "aaaaaaaaaaaa")
Custom validation using your own domain specific validators is also available - here's an example of how to use it:
import "github.com/trhacknon/govalidator"
type CustomByteArray [6]byte // custom types are supported and can be validated
type StructWithCustomByteArray struct {
ID CustomByteArray `valid:"customByteArrayValidator,customMinLengthValidator"` // multiple custom validators are possible as well and will be evaluated in sequence
Email string `valid:"email"`
CustomMinLength int `valid:"-"`
}
govalidator.CustomTypeTagMap.Set("customByteArrayValidator", func(i interface{}, context interface{}) bool {
switch v := context.(type) { // you can type switch on the context interface being validated
case StructWithCustomByteArray:
// you can check and validate against some other field in the context,
// return early or not validate against the context at all – your choice
case SomeOtherType:
// ...
default:
// expecting some other type? Throw/panic here or continue
}
switch v := i.(type) { // type switch on the struct field being validated
case CustomByteArray:
for _, e := range v { // this validator checks that the byte array is not empty, i.e. not all zeroes
if e != 0 {
return true
}
}
}
return false
})
govalidator.CustomTypeTagMap.Set("customMinLengthValidator", func(i interface{}, context interface{}) bool {
switch v := context.(type) { // this validates a field against the value in another field, i.e. dependent validation
case StructWithCustomByteArray:
return len(v.ID) >= v.CustomMinLength
}
return false
})
By default .Error() returns all errors in a single String. To access each error you can do this:
if err != nil {
errs := err.(govalidator.Errors).Errors()
for _, e := range errs {
fmt.Println(e.Error())
}
}
Custom error messages are supported via annotations by adding the ~
separator - here's an example of how to use it:
type Ticket struct {
Id int64 `json:"id"`
FirstName string `json:"firstname" valid:"required~First name is blank"`
}
Notes
Documentation is available here: godoc.org. Full information about code coverage is also available here: govalidator on gocover.io.
Support
If you do have a contribution to the package, feel free to create a Pull Request or an Issue.
What to contribute
If you don't know what to do, there are some features and functions that need to be done
- Refactor code
- Edit docs and README: spellcheck, grammar and typo check
- Create actual list of contributors and projects that currently using this package
- Resolve issues and bugs
- Update actual list of functions
- Update list of validators that available for
ValidateStruct
and add new - Implement new validators:
IsFQDN
,IsIMEI
,IsPostalCode
,IsISIN
,IsISRC
etc - Implement validation by maps
- Implement fuzzing testing
- Implement some struct/map/array utilities
- Implement map/array validation
- Implement benchmarking
- Implement batch of examples
- Look at forks for new features and fixes
Advice
Feel free to create what you want, but keep in mind when you implement new features:
- Code must be clear and readable, names of variables/constants clearly describes what they are doing
- Public functions must be documented and described in source file and added to README.md to the list of available functions
- There are must be unit-tests for any new functions and improvements
Credits
Contributors
This project exists thanks to all the people who contribute. [Contribute].
Special thanks to contributors
- Daniel Lohse
- Attila Oláh
- Daniel Korner
- Steven Wilkin
- Deiwin Sarjas
- Noah Shibley
- Nathan Davies
- Matt Sanford
- Simon ccl1115
Backers
Thank you to all our backers! 🙏 [Become a backer]
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
License
Documentation
¶
Overview ¶
Package govalidator is package of validators and sanitizers for strings, structs and collections.
Index ¶
- Constants
- Variables
- func Abs(value float64) float64
- func BlackList(str, chars string) string
- func ByteLength(str string, params ...string) bool
- func CamelCaseToUnderscore(str string) string
- func Contains(str, substring string) bool
- func Count(array []interface{}, iterator ConditionIterator) int
- func Each(array []interface{}, iterator Iterator)
- func ErrorByField(e error, field string) string
- func ErrorsByField(e error) map[string]string
- func Every(array []interface{}, iterator ConditionIterator) bool
- func Filter(array []interface{}, iterator ConditionIterator) []interface{}
- func Find(array []interface{}, iterator ConditionIterator) interface{}
- func GetLine(s string, index int) (string, error)
- func GetLines(s string) []string
- func HasLowerCase(str string) bool
- func HasUpperCase(str string) bool
- func HasWhitespace(str string) bool
- func HasWhitespaceOnly(str string) bool
- func InRange(value interface{}, left interface{}, right interface{}) bool
- func InRangeFloat32(value, left, right float32) bool
- func InRangeFloat64(value, left, right float64) bool
- func InRangeInt(value, left, right interface{}) bool
- func IsASCII(str string) bool
- func IsAlpha(str string) bool
- func IsAlphanumeric(str string) bool
- func IsBase64(str string) bool
- func IsByteLength(str string, min, max int) bool
- func IsCIDR(str string) bool
- func IsCRC32(str string) bool
- func IsCRC32b(str string) bool
- func IsCreditCard(str string) bool
- func IsDNSName(str string) bool
- func IsDataURI(str string) bool
- func IsDialString(str string) bool
- func IsDivisibleBy(str, num string) bool
- func IsE164(str string) bool
- func IsEmail(str string) bool
- func IsExistingEmail(email string) bool
- func IsFilePath(str string) (bool, int)
- func IsFloat(str string) bool
- func IsFullWidth(str string) bool
- func IsHalfWidth(str string) bool
- func IsHash(str string, algorithm string) bool
- func IsHexadecimal(str string) bool
- func IsHexcolor(str string) bool
- func IsHost(str string) bool
- func IsIMEI(str string) bool
- func IsIMSI(str string) bool
- func IsIP(str string) bool
- func IsIPv4(str string) bool
- func IsIPv6(str string) bool
- func IsISBN(str string, version int) bool
- func IsISBN10(str string) bool
- func IsISBN13(str string) bool
- func IsISO3166Alpha2(str string) bool
- func IsISO3166Alpha3(str string) bool
- func IsISO4217(str string) bool
- func IsISO693Alpha2(str string) bool
- func IsISO693Alpha3b(str string) bool
- func IsIn(str string, params ...string) bool
- func IsInRaw(str string, params ...string) bool
- func IsInt(str string) bool
- func IsJSON(str string) bool
- func IsLatitude(str string) bool
- func IsLongitude(str string) bool
- func IsLowerCase(str string) bool
- func IsMAC(str string) bool
- func IsMD4(str string) bool
- func IsMD5(str string) bool
- func IsMagnetURI(str string) bool
- func IsMongoID(str string) bool
- func IsMultibyte(str string) bool
- func IsNatural(value float64) bool
- func IsNegative(value float64) bool
- func IsNonNegative(value float64) bool
- func IsNonPositive(value float64) bool
- func IsNotNull(str string) bool
- func IsNull(str string) bool
- func IsNumeric(str string) bool
- func IsPort(str string) bool
- func IsPositive(value float64) bool
- func IsPrintableASCII(str string) bool
- func IsRFC3339(str string) bool
- func IsRFC3339WithoutZone(str string) bool
- func IsRGBcolor(str string) bool
- func IsRegex(str string) bool
- func IsRequestURI(rawurl string) bool
- func IsRequestURL(rawurl string) bool
- func IsRipeMD128(str string) bool
- func IsRipeMD160(str string) bool
- func IsRsaPub(str string, params ...string) bool
- func IsRsaPublicKey(str string, keylen int) bool
- func IsSHA1(str string) bool
- func IsSHA256(str string) bool
- func IsSHA3224(str string) bool
- func IsSHA3256(str string) bool
- func IsSHA3384(str string) bool
- func IsSHA3512(str string) bool
- func IsSHA384(str string) bool
- func IsSHA512(str string) bool
- func IsSSN(str string) bool
- func IsSemver(str string) bool
- func IsTiger128(str string) bool
- func IsTiger160(str string) bool
- func IsTiger192(str string) bool
- func IsTime(str string, format string) bool
- func IsType(v interface{}, params ...string) bool
- func IsULID(str string) bool
- func IsURL(str string) bool
- func IsUTFDigit(str string) bool
- func IsUTFLetter(str string) bool
- func IsUTFLetterNumeric(str string) bool
- func IsUTFNumeric(str string) bool
- func IsUUID(str string) bool
- func IsUUIDv3(str string) bool
- func IsUUIDv4(str string) bool
- func IsUUIDv5(str string) bool
- func IsUnixFilePath(str string) bool
- func IsUnixTime(str string) bool
- func IsUpperCase(str string) bool
- func IsVariableWidth(str string) bool
- func IsWhole(value float64) bool
- func IsWinFilePath(str string) bool
- func LeftTrim(str, chars string) string
- func Map(array []interface{}, iterator ResultIterator) []interface{}
- func Matches(str, pattern string) bool
- func MaxStringLength(str string, params ...string) bool
- func MinStringLength(str string, params ...string) bool
- func NormalizeEmail(str string) (string, error)
- func PadBoth(str string, padStr string, padLen int) string
- func PadLeft(str string, padStr string, padLen int) string
- func PadRight(str string, padStr string, padLen int) string
- func Range(str string, params ...string) bool
- func Reduce(array []interface{}, iterator ReduceIterator, initialValue interface{}) interface{}
- func RemoveTags(s string) string
- func ReplacePattern(str, pattern, replace string) string
- func Reverse(s string) string
- func RightTrim(str, chars string) string
- func RuneLength(str string, params ...string) bool
- func SafeFileName(str string) string
- func SetFieldsRequiredByDefault(value bool)
- func SetNilPtrAllowedByRequired(value bool)
- func Sign(value float64) float64
- func Some(array []interface{}, iterator ConditionIterator) bool
- func StringLength(str string, params ...string) bool
- func StringMatches(s string, params ...string) bool
- func StripLow(str string, keepNewLines bool) string
- func ToBoolean(str string) (bool, error)
- func ToFloat(value interface{}) (res float64, err error)
- func ToInt(value interface{}) (res int64, err error)
- func ToJSON(obj interface{}) (string, error)
- func ToString(obj interface{}) string
- func Trim(str, chars string) string
- func Truncate(str string, length int, ending string) string
- func TruncatingErrorf(str string, args ...interface{}) error
- func UnderscoreToCamelCase(s string) string
- func ValidateArray(array []interface{}, iterator ConditionIterator) bool
- func ValidateMap(s map[string]interface{}, m map[string]interface{}) (bool, error)
- func ValidateMapAsync(s map[string]interface{}, m map[string]interface{}) (<-chan bool, <-chan error)
- func ValidateStruct(s interface{}) (bool, error)
- func ValidateStructAsync(s interface{}) (<-chan bool, <-chan error)
- func WhiteList(str, chars string) string
- type ConditionIterator
- type CustomTypeValidator
- type Error
- type Errors
- type ISO3166Entry
- type ISO693Entry
- type InterfaceParamValidator
- type Iterator
- type ParamValidator
- type ReduceIterator
- type ResultIterator
- type UnsupportedTypeError
- type Validator
Examples ¶
Constants ¶
const ( Email string = "" /* 1208-byte string literal not displayed */ CreditCard string = "" /* 231-byte string literal not displayed */ ISBN10 string = "^(?:[0-9]{9}X|[0-9]{10})$" ISBN13 string = "^(?:[0-9]{13})$" UUID3 string = "^[0-9a-f]{8}-[0-9a-f]{4}-3[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$" UUID4 string = "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" UUID5 string = "^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" UUID string = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" Alpha string = "^[a-zA-Z]+$" Alphanumeric string = "^[a-zA-Z0-9]+$" Numeric string = "^[0-9]+$" Int string = "^(?:[-+]?(?:0|[1-9][0-9]*))$" Float string = "^(?:[-+]?(?:[0-9]+))?(?:\\.[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$" Hexadecimal string = "^[0-9a-fA-F]+$" Hexcolor string = "^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$" RGBcolor string = "" /* 157-byte string literal not displayed */ ASCII string = "^[\x00-\x7F]+$" Multibyte string = "[^\x00-\x7F]" FullWidth string = "[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]" HalfWidth string = "[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]" Base64 string = "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$" PrintableASCII string = "^[\x20-\x7E]+$" DataURI string = "^data:.+\\/(.+);base64$" MagnetURI string = "^magnet:\\?xt=urn:[a-zA-Z0-9]+:[a-zA-Z0-9]{32,40}&dn=.+&tr=.+$" Latitude string = "^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?)$" Longitude string = "^[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$" DNSName string = `^([a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62}){1}(\.[a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62})*[\._]?$` IP string = `` /* 659-byte string literal not displayed */ URLSchema string = `((ftp|tcp|udp|wss?|https?):\/\/)` URLUsername string = `(\S+(:\S*)?@)` URLPath string = `((\/|\?|#)[^\s]*)` URLPort string = `(:(\d{1,5}))` URLIP string = `([1-9]\d?|1\d\d|2[01]\d|22[0-3]|24\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-5]))` URLSubdomain string = `((www\.)|([a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*[a-zA-Z0-9]\.[a-zA-Z0-9]+))` URL = `^` + URLSchema + `?` + URLUsername + `?` + `((` + URLIP + `|(\[` + IP + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + URLSubdomain + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + URLPort + `?` + URLPath + `?$` SSN string = `^\d{3}[- ]?\d{2}[- ]?\d{4}$` WinPath string = `^[a-zA-Z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$` UnixPath string = `^(/[^/\x00]*)+/?$` WinARPath string = `` /* 128-byte string literal not displayed */ UnixARPath string = `^((\.{0,2}/)?([^/\x00]*))+/?$` Semver string = "" /* 183-byte string literal not displayed */ IMEI string = "^[0-9a-f]{14}$|^\\d{15}$|^\\d{18}$" IMSI string = "^\\d{14,15}$" E164 string = `^\+?[1-9]\d{1,14}$` )
Basic regular expressions for validating strings
const ( // Unknown is unresolved OS type Unknown = iota // Win is Windows type Win // Unix is *nix OS types Unix )
Used by IsFilePath func
Variables ¶
var CustomTypeTagMap = &customTypeTagMap{validators: make(map[string]CustomTypeValidator)}
CustomTypeTagMap is a map of functions that can be used as tags for ValidateStruct function. Use this to validate compound or custom types that need to be handled as a whole, e.g. `type UUID [16]byte` (this would be handled as an array of bytes).
var Escape = html.EscapeString
Escape replaces <, >, & and " with HTML entities.
var ISO3166List = []ISO3166Entry{}/* 249 elements not displayed */
ISO3166List based on https://www.iso.org/obp/ui/#search/code/ Code Type "Officially Assigned Codes"
var ISO4217List = []string{}/* 181 elements not displayed */
ISO4217List is the list of ISO currency codes
var ISO693List = []ISO693Entry{}/* 184 elements not displayed */
ISO693List based on http://data.okfn.org/data/core/language-codes/r/language-codes-3b2.json
var InterfaceParamTagMap = map[string]InterfaceParamValidator{ "type": IsType, }
InterfaceParamTagMap is a map of functions accept variants parameters for an interface value
var InterfaceParamTagRegexMap = map[string]*regexp.Regexp{ "type": regexp.MustCompile(`^type\((.*)\)$`), }
InterfaceParamTagRegexMap maps interface param tags to their respective regexes.
var ParamTagMap = map[string]ParamValidator{ "length": ByteLength, "range": Range, "runelength": RuneLength, "stringlength": StringLength, "matches": StringMatches, "in": IsInRaw, "rsapub": IsRsaPub, "minstringlength": MinStringLength, "maxstringlength": MaxStringLength, }
ParamTagMap is a map of functions accept variants parameters
var ParamTagRegexMap = map[string]*regexp.Regexp{ "range": regexp.MustCompile("^range\\((\\d+)\\|(\\d+)\\)$"), "length": regexp.MustCompile("^length\\((\\d+)\\|(\\d+)\\)$"), "runelength": regexp.MustCompile("^runelength\\((\\d+)\\|(\\d+)\\)$"), "stringlength": regexp.MustCompile("^stringlength\\((\\d+)\\|(\\d+)\\)$"), "in": regexp.MustCompile(`^in\((.*)\)`), "matches": regexp.MustCompile(`^matches\((.+)\)$`), "rsapub": regexp.MustCompile("^rsapub\\((\\d+)\\)$"), "minstringlength": regexp.MustCompile("^minstringlength\\((\\d+)\\)$"), "maxstringlength": regexp.MustCompile("^maxstringlength\\((\\d+)\\)$"), }
ParamTagRegexMap maps param tags to their respective regexes.
var TagMap = map[string]Validator{ "email": IsEmail, "url": IsURL, "dialstring": IsDialString, "requrl": IsRequestURL, "requri": IsRequestURI, "alpha": IsAlpha, "utfletter": IsUTFLetter, "alphanum": IsAlphanumeric, "utfletternum": IsUTFLetterNumeric, "numeric": IsNumeric, "utfnumeric": IsUTFNumeric, "utfdigit": IsUTFDigit, "hexadecimal": IsHexadecimal, "hexcolor": IsHexcolor, "rgbcolor": IsRGBcolor, "lowercase": IsLowerCase, "uppercase": IsUpperCase, "int": IsInt, "float": IsFloat, "null": IsNull, "notnull": IsNotNull, "uuid": IsUUID, "uuidv3": IsUUIDv3, "uuidv4": IsUUIDv4, "uuidv5": IsUUIDv5, "creditcard": IsCreditCard, "isbn10": IsISBN10, "isbn13": IsISBN13, "json": IsJSON, "multibyte": IsMultibyte, "ascii": IsASCII, "printableascii": IsPrintableASCII, "fullwidth": IsFullWidth, "halfwidth": IsHalfWidth, "variablewidth": IsVariableWidth, "base64": IsBase64, "datauri": IsDataURI, "ip": IsIP, "port": IsPort, "ipv4": IsIPv4, "ipv6": IsIPv6, "dns": IsDNSName, "host": IsHost, "mac": IsMAC, "latitude": IsLatitude, "longitude": IsLongitude, "ssn": IsSSN, "semver": IsSemver, "rfc3339": IsRFC3339, "rfc3339WithoutZone": IsRFC3339WithoutZone, "ISO3166Alpha2": IsISO3166Alpha2, "ISO3166Alpha3": IsISO3166Alpha3, "ISO4217": IsISO4217, "IMEI": IsIMEI, "ulid": IsULID, }
TagMap is a map of functions, that can be used as tags for ValidateStruct function.
Functions ¶
func ByteLength ¶
ByteLength checks string's length
func CamelCaseToUnderscore ¶
CamelCaseToUnderscore converts from camel case form to underscore separated form. Ex.: MyFunc => my_func
func Count ¶
func Count(array []interface{}, iterator ConditionIterator) int
Count iterates over the slice and apply ConditionIterator to every item. Returns count of items that meets ConditionIterator.
Example ¶
Output:
func Each ¶
func Each(array []interface{}, iterator Iterator)
Each iterates over the slice and apply Iterator to every item
Example ¶
Output:
func ErrorByField ¶
ErrorByField returns error for specified field of the struct validated by ValidateStruct or empty string if there are no errors or this field doesn't exists or doesn't have any errors.
func ErrorsByField ¶
ErrorsByField returns map of errors of the struct validated by ValidateStruct or empty map if there are no errors.
func Every ¶
func Every(array []interface{}, iterator ConditionIterator) bool
Every validates that every item of array corresponds to ConditionIterator. Returns boolean.
func Filter ¶
func Filter(array []interface{}, iterator ConditionIterator) []interface{}
Filter iterates over the slice and apply ConditionIterator to every item. Returns new slice.
Example ¶
Output:
func Find ¶
func Find(array []interface{}, iterator ConditionIterator) interface{}
Find iterates over the slice and apply ConditionIterator to every item. Returns first item that meet ConditionIterator or nil otherwise.
Example ¶
Output:
func HasLowerCase ¶
HasLowerCase checks if the string contains at least 1 lowercase. Empty string is valid.
func HasUpperCase ¶
HasUpperCase checks if the string contains as least 1 uppercase. Empty string is valid.
func HasWhitespace ¶
HasWhitespace checks if the string contains any whitespace
func HasWhitespaceOnly ¶
HasWhitespaceOnly checks the string only contains whitespace
func InRange ¶
func InRange(value interface{}, left interface{}, right interface{}) bool
InRange returns true if value lies between left and right border, generic type to handle int, float32, float64 and string. All types must the same type. False if value doesn't lie in range or if it incompatible or not comparable
Example ¶
Output:
func InRangeFloat32 ¶
InRangeFloat32 returns true if value lies between left and right border
Example ¶
Output:
func InRangeFloat64 ¶
InRangeFloat64 returns true if value lies between left and right border
Example ¶
Output:
func InRangeInt ¶
func InRangeInt(value, left, right interface{}) bool
InRangeInt returns true if value lies between left and right border
Example ¶
Output:
func IsAlphanumeric ¶
IsAlphanumeric checks if the string contains only letters and numbers. Empty string is valid.
func IsByteLength ¶
IsByteLength checks if the string's length (in bytes) falls in a range.
func IsCreditCard ¶
IsCreditCard checks if the string is a credit card.
func IsDialString ¶
IsDialString validates the given string for usage with the various Dial() functions
func IsDivisibleBy ¶
IsDivisibleBy checks if the string is a number that's divisible by another. If second argument is not valid integer or zero, it's return false. Otherwise, if first argument is not valid integer or zero, it's return true (Invalid string converts to zero).
Example ¶
This small example illustrate how to work with IsDivisibleBy function.
Output:
func IsExistingEmail ¶
IsExistingEmail checks if the string is an email of existing domain
func IsFilePath ¶
IsFilePath checks is a string is Win or Unix file path and returns it's type.
func IsFullWidth ¶
IsFullWidth checks if the string contains any full-width chars. Empty string is valid.
func IsHalfWidth ¶
IsHalfWidth checks if the string contains any half-width chars. Empty string is valid.
func IsHash ¶
IsHash checks if a string is a hash of type algorithm. Algorithm is one of ['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128', 'tiger160', 'tiger192', 'crc32', 'crc32b']
func IsHexadecimal ¶
IsHexadecimal checks if the string is a hexadecimal number.
func IsHexcolor ¶
IsHexcolor checks if the string is a hexadecimal color.
func IsISBN ¶
IsISBN checks if the string is an ISBN (version 10 or 13). If version value is not equal to 10 or 13, it will be checks both variants.
func IsISO3166Alpha2 ¶
IsISO3166Alpha2 checks if a string is valid two-letter country code
func IsISO3166Alpha3 ¶
IsISO3166Alpha3 checks if a string is valid three-letter country code
func IsISO693Alpha2 ¶
IsISO693Alpha2 checks if a string is valid two-letter language code
func IsISO693Alpha3b ¶
IsISO693Alpha3b checks if a string is valid three-letter language code
func IsLongitude ¶
IsLongitude checks if a string is valid longitude.
func IsLowerCase ¶
IsLowerCase checks if the string is lowercase. Empty string is valid.
func IsMAC ¶
IsMAC checks if a string is valid MAC address. Possible MAC formats: 01:23:45:67:89:ab 01:23:45:67:89:ab:cd:ef 01-23-45-67-89-ab 01-23-45-67-89-ab-cd-ef 0123.4567.89ab 0123.4567.89ab.cdef
func IsMagnetURI ¶
IsMagnetURI checks if a string is valid magnet URI
func IsMongoID ¶
IsMongoID checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
func IsMultibyte ¶
IsMultibyte checks if the string contains one or more multibyte chars. Empty string is valid.
func IsNatural ¶
IsNatural returns true if value is natural number (positive and whole)
Example ¶
Output:
func IsPrintableASCII ¶
IsPrintableASCII checks if the string contains printable ASCII chars only. Empty string is valid.
func IsRFC3339WithoutZone ¶
IsRFC3339WithoutZone checks if string is valid timestamp value according to RFC3339 which excludes the timezone.
func IsRGBcolor ¶
IsRGBcolor checks if the string is a valid RGB color in form rgb(RRR, GGG, BBB).
func IsRequestURI ¶
IsRequestURI checks if the string rawurl, assuming it was received in an HTTP request, is an absolute URI or an absolute path.
func IsRequestURL ¶
IsRequestURL checks if the string rawurl, assuming it was received in an HTTP request, is a valid URL confirm to RFC 3986
func IsRipeMD128 ¶
IsRipeMD128 checks is a string is a RipeMD128 hash. Alias for `IsHash(str, "ripemd128")`
func IsRipeMD160 ¶
IsRipeMD160 checks is a string is a RipeMD160 hash. Alias for `IsHash(str, "ripemd160")`
func IsRsaPublicKey ¶
IsRsaPublicKey checks if a string is valid public key with provided length
func IsSHA3224 ¶
IsSHA3224 checks is a string is a SHA3-224 hash. Alias for `IsHash(str, "sha3-224")`
func IsSHA3256 ¶
IsSHA3256 checks is a string is a SHA3-256 hash. Alias for `IsHash(str, "sha3-256")`
func IsSHA3384 ¶
IsSHA3384 checks is a string is a SHA3-384 hash. Alias for `IsHash(str, "sha3-384")`
func IsSHA3512 ¶
IsSHA3512 checks is a string is a SHA3-512 hash. Alias for `IsHash(str, "sha3-512")`
func IsTiger128 ¶
IsTiger128 checks is a string is a Tiger128 hash. Alias for `IsHash(str, "tiger128")`
func IsTiger160 ¶
IsTiger160 checks is a string is a Tiger160 hash. Alias for `IsHash(str, "tiger160")`
func IsTiger192 ¶
IsTiger192 checks is a string is a Tiger192 hash. Alias for `IsHash(str, "tiger192")`
func IsULID ¶
IsULID checks if the string is a ULID.
Implementation got from:
https://github.com/oklog/ulid (Apache-2.0 License)
func IsUTFDigit ¶
IsUTFDigit checks if the string contains only unicode radix-10 decimal digits. Empty string is valid.
func IsUTFLetter ¶
IsUTFLetter checks if the string contains only unicode letter characters. Similar to IsAlpha but for all languages. Empty string is valid.
func IsUTFLetterNumeric ¶
IsUTFLetterNumeric checks if the string contains only unicode letters and numbers. Empty string is valid.
func IsUTFNumeric ¶
IsUTFNumeric checks if the string contains only unicode numbers of any kind. Numbers can be 0-9 but also Fractions ¾,Roman Ⅸ and Hangzhou 〩. Empty string is valid.
func IsUnixFilePath ¶
IsUnixFilePath checks both relative & absolute paths in Unix
func IsUnixTime ¶
IsUnixTime checks if string is valid unix timestamp value
func IsUpperCase ¶
IsUpperCase checks if the string is uppercase. Empty string is valid.
func IsVariableWidth ¶
IsVariableWidth checks if the string contains a mixture of full and half-width chars. Empty string is valid.
func IsWinFilePath ¶
IsWinFilePath checks both relative & absolute paths in Windows
func LeftTrim ¶
LeftTrim trims characters from the left side of the input. If second argument is empty, it will remove leading spaces.
func Map ¶
func Map(array []interface{}, iterator ResultIterator) []interface{}
Map iterates over the slice and apply ResultIterator to every item. Returns new slice as a result.
Example ¶
Output:
func Matches ¶
Matches checks if string matches the pattern (pattern is regular expression) In case of error return false
func MaxStringLength ¶
MaxStringLength checks string's maximum length (including multi byte strings)
func MinStringLength ¶
MinStringLength checks string's minimum length (including multi byte strings)
func NormalizeEmail ¶
NormalizeEmail canonicalize an email address. The local part of the email address is lowercased for all domains; the hostname is always lowercased and the local part of the email address is always lowercased for hosts that are known to be case-insensitive (currently only GMail). Normalization follows special rules for known providers: currently, GMail addresses have dots removed in the local part and are stripped of tags (e.g. some.one+tag@gmail.com becomes someone@gmail.com) and all @googlemail.com addresses are normalized to @gmail.com.
func PadBoth ¶
PadBoth pads both sides of a string if size of string is less then indicated pad length
func PadLeft ¶
PadLeft pads left side of a string if size of string is less then indicated pad length
func PadRight ¶
PadRight pads right side of a string if size of string is less then indicated pad length
func Reduce ¶
func Reduce(array []interface{}, iterator ReduceIterator, initialValue interface{}) interface{}
Reduce boils down a list of values into a single value by ReduceIterator
func ReplacePattern ¶
ReplacePattern replaces regular expression pattern in string
Example ¶
Output:
func RightTrim ¶
RightTrim trims characters from the right side of the input. If second argument is empty, it will remove trailing spaces.
func RuneLength ¶
RuneLength checks string's length Alias for StringLength
func SafeFileName ¶
SafeFileName returns safe string that can be used in file names
func SetFieldsRequiredByDefault ¶
func SetFieldsRequiredByDefault(value bool)
SetFieldsRequiredByDefault causes validation to fail when struct fields do not include validations or are not explicitly marked as exempt (using `valid:"-"` or `valid:"email,optional"`). This struct definition will fail govalidator.ValidateStruct() (and the field values do not matter):
type exampleStruct struct { Name string `` Email string `valid:"email"`
This, however, will only fail when Email is empty or an invalid email address:
type exampleStruct2 struct { Name string `valid:"-"` Email string `valid:"email"`
Lastly, this will only fail when Email is an invalid email address but not when it's empty:
type exampleStruct2 struct { Name string `valid:"-"` Email string `valid:"email,optional"`
func SetNilPtrAllowedByRequired ¶
func SetNilPtrAllowedByRequired(value bool)
SetNilPtrAllowedByRequired causes validation to pass for nil ptrs when a field is set to required. The validation will still reject ptr fields in their zero value state. Example with this enabled:
type exampleStruct struct { Name *string `valid:"required"`
With `Name` set to "", this will be considered invalid input and will cause a validation error. With `Name` set to nil, this will be considered valid by validation. By default this is disabled.
func Sign ¶
Sign returns signum of number: 1 in case of value > 0, -1 in case of value < 0, 0 otherwise
Example ¶
Output:
func Some ¶
func Some(array []interface{}, iterator ConditionIterator) bool
Some validates that any item of array corresponds to ConditionIterator. Returns boolean.
func StringLength ¶
StringLength checks string's length (including multi byte strings)
func StringMatches ¶
StringMatches checks if a string matches a given pattern.
func StripLow ¶
StripLow removes characters with a numerical value < 32 and 127, mostly control characters. If keep_new_lines is true, newline characters are preserved (\n and \r, hex 0xA and 0xD).
func ToFloat ¶
ToFloat convert the input string to a float, or 0.0 if the input is not a float.
Example ¶
Output:
func ToInt ¶
ToInt convert the input string or any int type to an integer type 64, or 0 if the input is not an integer.
Example ¶
Output:
func ToString ¶
func ToString(obj interface{}) string
ToString convert the input to a string.
Example ¶
Output:
func Trim ¶
Trim trims characters from both sides of the input. If second argument is empty, it will remove spaces.
Example ¶
Output:
func TruncatingErrorf ¶
TruncatingErrorf removes extra args from fmt.Errorf if not formatted in the str object
func UnderscoreToCamelCase ¶
UnderscoreToCamelCase converts from underscore separated form to camel case form. Ex.: my_func => MyFunc
func ValidateArray ¶
func ValidateArray(array []interface{}, iterator ConditionIterator) bool
ValidateArray performs validation according to condition iterator that validates every element of the array
func ValidateMap ¶
ValidateMap use validation map for fields. result will be equal to `false` if there are any errors. s is the map containing the data to be validated. m is the validation map in the form:
map[string]interface{}{"name":"required,alpha","address":map[string]interface{}{"line1":"required,alphanum"}}
func ValidateMapAsync ¶
func ValidateMapAsync(s map[string]interface{}, m map[string]interface{}) (<-chan bool, <-chan error)
ValidateMapAsync performs async validation of the map and returns results through the channels
func ValidateStruct ¶
ValidateStruct use tags for fields. result will be equal to `false` if there are any errors. todo currently there is no guarantee that errors will be returned in predictable order (tests may to fail)
Example ¶
Output:
func ValidateStructAsync ¶
ValidateStructAsync performs async validation of the struct and returns results through the channels
Types ¶
type ConditionIterator ¶
ConditionIterator is the function that accepts element of slice/array and its index and returns boolean
type CustomTypeValidator ¶
type CustomTypeValidator func(i interface{}, o interface{}) bool
CustomTypeValidator is a wrapper for validator functions that returns bool and accepts any type. The second parameter should be the context (in the case of validating a struct: the whole object being validated).
type Error ¶
type Error struct { Name string Err error CustomErrorMessageExists bool // Validator indicates the name of the validator that failed Validator string Path []string }
Error encapsulates a name, an error and whether there's a custom error message or not.
type Errors ¶
type Errors []error
Errors is an array of multiple errors and conforms to the error interface.
type ISO3166Entry ¶
type ISO3166Entry struct { EnglishShortName string FrenchShortName string Alpha2Code string Alpha3Code string Numeric string }
ISO3166Entry stores country codes
type ISO693Entry ¶
ISO693Entry stores ISO language codes
type InterfaceParamValidator ¶
InterfaceParamValidator is a wrapper for functions that accept variants parameters for an interface value
type Iterator ¶
type Iterator func(interface{}, int)
Iterator is the function that accepts element of slice/array and its index
type ParamValidator ¶
ParamValidator is a wrapper for validator functions that accept additional parameters.
type ReduceIterator ¶
type ReduceIterator func(interface{}, interface{}) interface{}
ReduceIterator is the function that accepts two element of slice/array and returns result of merging those values
type ResultIterator ¶
type ResultIterator func(interface{}, int) interface{}
ResultIterator is the function that accepts element of slice/array and its index and returns any result
type UnsupportedTypeError ¶
UnsupportedTypeError is a wrapper for reflect.Type
func (*UnsupportedTypeError) Error ¶
func (e *UnsupportedTypeError) Error() string
Error returns string equivalent for reflect.Type