OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gopkg.in / go-playground / validator.v9 / README.md
1 Package validator
2 ================
3 <img align="right" src="https://raw.githubusercontent.com/go-playground/validator/v9/logo.png">[![Join the chat at https://gitter.im/go-playground/validator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4 ![Project status](https://img.shields.io/badge/version-9.8.0-green.svg)
5 [![Build Status](https://semaphoreci.com/api/v1/joeybloggs/validator/branches/v9/badge.svg)](https://semaphoreci.com/joeybloggs/validator)
6 [![Coverage Status](https://coveralls.io/repos/go-playground/validator/badge.svg?branch=v9&service=github)](https://coveralls.io/github/go-playground/validator?branch=v9)
7 [![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/validator)](https://goreportcard.com/report/github.com/go-playground/validator)
8 [![GoDoc](https://godoc.org/gopkg.in/go-playground/validator.v9?status.svg)](https://godoc.org/gopkg.in/go-playground/validator.v9)
9 ![License](https://img.shields.io/dub/l/vibe-d.svg)
10
11 Package validator implements value validations for structs and individual fields based on tags.
12
13 It has the following **unique** features:
14
15 -   Cross Field and Cross Struct validations by using validation tags or custom validators.  
16 -   Slice, Array and Map diving, which allows any or all levels of a multidimensional field to be validated.  
17 -   Handles type interface by determining it's underlying type prior to validation.
18 -   Handles custom field types such as sql driver Valuer see [Valuer](https://golang.org/src/database/sql/driver/types.go?s=1210:1293#L29)
19 -   Alias validation tags, which allows for mapping of several validations to a single tag for easier defining of validations on structs
20 -   Extraction of custom defined Field Name e.g. can specify to extract the JSON name while validating and have it available in the resulting FieldError
21 -   Customizable i18n aware error messages.
22 -   Default validator for the [gin](https://github.com/gin-gonic/gin) web framework; upgrading from v8 to v9 in gin see [here](https://github.com/go-playground/validator/tree/v9/_examples/gin-upgrading-overriding)
23
24 Installation
25 ------------
26
27 Use go get.
28
29         go get gopkg.in/go-playground/validator.v9
30
31 Then import the validator package into your own code.
32
33         import "gopkg.in/go-playground/validator.v9"
34
35 Error Return Value
36 -------
37
38 Validation functions return type error
39
40 They return type error to avoid the issue discussed in the following, where err is always != nil:
41
42 * http://stackoverflow.com/a/29138676/3158232
43 * https://github.com/go-playground/validator/issues/134
44
45 Validator only InvalidValidationError for bad validation input, nil or ValidationErrors as type error; so, in your code all you need to do is check if the error returned is not nil, and if it's not check if error is InvalidValidationError ( if necessary, most of the time it isn't ) type cast it to type ValidationErrors like so:
46
47 ```go
48 err := validate.Struct(mystruct)
49 validationErrors := err.(validator.ValidationErrors)
50  ```
51
52 Usage and documentation
53 ------
54
55 Please see http://godoc.org/gopkg.in/go-playground/validator.v9 for detailed usage docs.
56
57 ##### Examples:
58
59 - [Simple](https://github.com/go-playground/validator/blob/v9/_examples/simple/main.go)
60 - [Custom Field Types](https://github.com/go-playground/validator/blob/v9/_examples/custom/main.go)
61 - [Struct Level](https://github.com/go-playground/validator/blob/v9/_examples/struct-level/main.go)
62 - [Translations & Custom Errors](https://github.com/go-playground/validator/blob/v9/_examples/translations/main.go)
63 - [Gin upgrade and/or override validator](https://github.com/go-playground/validator/tree/v9/_examples/gin-upgrading-overriding)
64 - [wash - an example application putting it all together](https://github.com/bluesuncorp/wash)
65
66 Benchmarks
67 ------
68 ###### Run on MacBook Pro (15-inch, 2017) Go version go1.9.1 linux/amd64
69 ```go
70 go test -bench=. -benchmem=true
71 BenchmarkFieldSuccess-8                                         20000000                87.2 ns/op             0 B/op          0 allocs/op
72 BenchmarkFieldSuccessParallel-8                                 50000000                26.1 ns/op             0 B/op          0 allocs/op
73 BenchmarkFieldFailure-8                                          5000000               299 ns/op             208 B/op          4 allocs/op
74 BenchmarkFieldFailureParallel-8                                 20000000               100 ns/op             208 B/op          4 allocs/op
75 BenchmarkFieldDiveSuccess-8                                      2000000               645 ns/op             201 B/op         11 allocs/op
76 BenchmarkFieldDiveSuccessParallel-8                             10000000               198 ns/op             201 B/op         11 allocs/op
77 BenchmarkFieldDiveFailure-8                                      2000000               876 ns/op             412 B/op         16 allocs/op
78 BenchmarkFieldDiveFailureParallel-8                              5000000               268 ns/op             413 B/op         16 allocs/op
79 BenchmarkFieldCustomTypeSuccess-8                               10000000               228 ns/op              32 B/op          2 allocs/op
80 BenchmarkFieldCustomTypeSuccessParallel-8                       20000000                70.0 ns/op            32 B/op          2 allocs/op
81 BenchmarkFieldCustomTypeFailure-8                                5000000               286 ns/op             208 B/op          4 allocs/op
82 BenchmarkFieldCustomTypeFailureParallel-8                       20000000                95.6 ns/op           208 B/op          4 allocs/op
83 BenchmarkFieldOrTagSuccess-8                                     2000000               857 ns/op              16 B/op          1 allocs/op
84 BenchmarkFieldOrTagSuccessParallel-8                             3000000               397 ns/op              16 B/op          1 allocs/op
85 BenchmarkFieldOrTagFailure-8                                     3000000               495 ns/op             224 B/op          5 allocs/op
86 BenchmarkFieldOrTagFailureParallel-8                             5000000               376 ns/op             224 B/op          5 allocs/op
87 BenchmarkStructLevelValidationSuccess-8                         10000000               226 ns/op              32 B/op          2 allocs/op
88 BenchmarkStructLevelValidationSuccessParallel-8                 20000000                68.4 ns/op            32 B/op          2 allocs/op
89 BenchmarkStructLevelValidationFailure-8                          3000000               497 ns/op             304 B/op          8 allocs/op
90 BenchmarkStructLevelValidationFailureParallel-8                 10000000               170 ns/op             304 B/op          8 allocs/op
91 BenchmarkStructSimpleCustomTypeSuccess-8                         3000000               420 ns/op              32 B/op          2 allocs/op
92 BenchmarkStructSimpleCustomTypeSuccessParallel-8                20000000               124 ns/op              32 B/op          2 allocs/op
93 BenchmarkStructSimpleCustomTypeFailure-8                         2000000               681 ns/op             424 B/op          9 allocs/op
94 BenchmarkStructSimpleCustomTypeFailureParallel-8                10000000               244 ns/op             440 B/op         10 allocs/op
95 BenchmarkStructFilteredSuccess-8                                 2000000               659 ns/op             288 B/op          9 allocs/op
96 BenchmarkStructFilteredSuccessParallel-8                        10000000               211 ns/op             288 B/op          9 allocs/op
97 BenchmarkStructFilteredFailure-8                                 3000000               482 ns/op             256 B/op          7 allocs/op
98 BenchmarkStructFilteredFailureParallel-8                        10000000               162 ns/op             256 B/op          7 allocs/op
99 BenchmarkStructPartialSuccess-8                                  3000000               564 ns/op             256 B/op          6 allocs/op
100 BenchmarkStructPartialSuccessParallel-8                         10000000               180 ns/op             256 B/op          6 allocs/op
101 BenchmarkStructPartialFailure-8                                  2000000               779 ns/op             480 B/op         11 allocs/op
102 BenchmarkStructPartialFailureParallel-8                          5000000               268 ns/op             480 B/op         11 allocs/op
103 BenchmarkStructExceptSuccess-8                                   2000000               879 ns/op             496 B/op         12 allocs/op
104 BenchmarkStructExceptSuccessParallel-8                          10000000               163 ns/op             240 B/op          5 allocs/op
105 BenchmarkStructExceptFailure-8                                   2000000               734 ns/op             464 B/op         10 allocs/op
106 BenchmarkStructExceptFailureParallel-8                           5000000               259 ns/op             464 B/op         10 allocs/op
107 BenchmarkStructSimpleCrossFieldSuccess-8                         3000000               432 ns/op              72 B/op          3 allocs/op
108 BenchmarkStructSimpleCrossFieldSuccessParallel-8                10000000               129 ns/op              72 B/op          3 allocs/op
109 BenchmarkStructSimpleCrossFieldFailure-8                         2000000               671 ns/op             304 B/op          8 allocs/op
110 BenchmarkStructSimpleCrossFieldFailureParallel-8                10000000               229 ns/op             304 B/op          8 allocs/op
111 BenchmarkStructSimpleCrossStructCrossFieldSuccess-8              2000000               628 ns/op              80 B/op          4 allocs/op
112 BenchmarkStructSimpleCrossStructCrossFieldSuccessParallel-8     10000000               182 ns/op              80 B/op          4 allocs/op
113 BenchmarkStructSimpleCrossStructCrossFieldFailure-8              2000000               872 ns/op             320 B/op          9 allocs/op
114 BenchmarkStructSimpleCrossStructCrossFieldFailureParallel-8      5000000               267 ns/op             320 B/op          9 allocs/op
115 BenchmarkStructSimpleSuccess-8                                   5000000               274 ns/op               0 B/op          0 allocs/op
116 BenchmarkStructSimpleSuccessParallel-8                          20000000                79.0 ns/op             0 B/op          0 allocs/op
117 BenchmarkStructSimpleFailure-8                                   2000000               647 ns/op             424 B/op          9 allocs/op
118 BenchmarkStructSimpleFailureParallel-8                          10000000               224 ns/op             424 B/op          9 allocs/op
119 BenchmarkStructComplexSuccess-8                                  1000000              1557 ns/op             128 B/op          8 allocs/op
120 BenchmarkStructComplexSuccessParallel-8                          3000000               473 ns/op             128 B/op          8 allocs/op
121 BenchmarkStructComplexFailure-8                                   300000              4373 ns/op            3041 B/op         53 allocs/op
122 BenchmarkStructComplexFailureParallel-8                          1000000              1554 ns/op            3041 B/op         53 allocs/op
123 ```
124
125 Complementary Software
126 ----------------------
127
128 Here is a list of software that complements using this library either pre or post validation.
129
130 * [form](https://github.com/go-playground/form) - Decodes url.Values into Go value(s) and Encodes Go value(s) into url.Values. Dual Array and Full map support.
131 * [mold](https://github.com/go-playground/mold) - A general library to help modify or set data within data structures and other objects
132
133 How to Contribute
134 ------
135
136 Make a pull request...
137
138 License
139 ------
140 Distributed under MIT License, please see license file within the code for more details.