validator - 💯クロスフィールド、クロス構造体、マップ、スライス、アレイダイビングを含むGo構造体とフィールドの検証

(:100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving)

Created at: 2015-02-13 00:32:22
Language: Go
License: MIT

パッケージバリデータ

https://gitter.im/go-playground/validator でチャットに参加する プロジェクトの状況 ビルドステータス カバレッジステータス Goレポートカード ゴードック ライセンス

パッケージバリデータは、タグに基づいて構造体と個々のフィールドの値の検証を実装します。

次の独自の機能があります。

  • 検証タグまたはカスタム検証コントロールを使用したクロスフィールドおよびクロス構造体の検証。
  • スライス、配列、およびマップダイビング: 多次元フィールドの一部またはすべてのレベルを検証できます。
  • 検証のためにマップキーと値の両方に飛び込む機能
  • 検証の前に基になる型を決定することによって、型インターフェイスを処理します。
  • SQL ドライバーなどのユーザー設定フィールド型を処理します。 「評価者」を参照してください。
  • エイリアス検証タグ: 複数の検証を 1 つのタグにマッピングして、構造体の検証を簡単に定義できます。
  • カスタム定義のフィールド名の抽出は、検証中にJSON名を抽出し、結果のFieldErrorで使用できるように指定できます
  • カスタマイズ可能なi18n対応エラーメッセージ。
  • ジンウェブフレームワークのデフォルトのバリデーター。ジンでのV8からV9へのアップグレードはこちら

取り付け

go get を使用します。

go get github.com/go-playground/validator/v10

次に、バリデータパッケージを独自のコードにインポートします。

import "github.com/go-playground/validator/v10"

エラー戻り値

検証関数の戻り値の型エラー

これらは、以下で説明する問題を回避するために型エラーを返します (err は常に != nil です)。

バリデータは、不正な検証入力に対しては無効な検証エラーのみを返しますが、タイプエラーとして nil または 検証エラー。だから、あなたのコードでは、返されたエラーがnilではないかどうかをチェックし、エラーがInvalidValidationErrorであるかどうかをチェックするだけです(必要に応じて、ほとんどの場合そうではありません)型キャストしてValidationErrorsを次のように入力します。

err := validate.Struct(mystruct)
validationErrors := err.(validator.ValidationErrors)

使用法とドキュメント

詳しい使い方のドキュメントは https://pkg.go.dev/github.com/go-playground/validator/v10 をご覧ください。

例:

組み込みバリデーション

田畑:

タグ 形容
EQCSFIELD フィールドが別のフィールドと等しい (相対)
イクフィールド フィールドが別のフィールドと等しい
フィールドに含まれるもの doc.go には記載されていません
フィールド除外 doc.go には記載されていません
GTCSFフィールド フィールドが別の相対フィールドより大きい
グテックスフィールド 別の相対フィールド以上のフィールド
グテフィールド 別のフィールド以上のフィールド
ティッカー フィールドが別のフィールドより大きい
LTCフィールド 別の相対フィールドより小さい
テックスフィールド 別の相対フィールド以下
ティフィールド 別のフィールド以下
中田 他のフィールドより小さい
ネックスフィールド フィールドが別のフィールドと等しくない (相対)
ネフィールド フィールドが別のフィールドと等しくない

ネットワーク:

タグ 形容
サイドル クラスレスドメイン間ルーティング CIDR
CIDRV4 クラスレスドメイン間ルーティング CIDRv4
CIDRV6 クラスレスドメイン間ルーティング CIDRv6
データウリ データ URL
FQDN 完全修飾ドメイン名 (FQDN)
ホスト名 ホスト名 RFC 952
hostname_port ホスト ポート
hostname_rfc1123 ホスト名 RFC 1123
IPアドレス インターネット プロトコル アドレス IP
ip4_addr インターネット プロトコル アドレス IPv4
ip6_addr インターネット プロトコル アドレス IPv6
ip_addr インターネット プロトコル アドレス IP
IPv4 インターネット プロトコル アドレス IPv4
IPv6 インターネット プロトコル アドレス IPv6
マック メディア アクセス制御アドレス MAC
tcp4_addr 伝送制御プロトコル アドレス TCPv4
tcp6_addr 伝送制御プロトコル アドレス TCPv6
tcp_addr 伝送制御プロトコル アドレス TCP
udp4_addr ユーザー データグラム プロトコル アドレス UDPv4
udp6_addr ユーザ データグラム プロトコル アドレス UDPv6
udp_addr ユーザ データグラム プロトコル アドレス UDP
unix_addr Unix ドメインソケットエンドポイントアドレス
ウリ URI 文字列
リンク URL 文字列
url_encoded URL エンコード
urn_rfc2141 Urn RFC 2141 文字列

ストリングス:

タグ 形容
アルファ アルファ版のみ
英数字 英数字
英数字ユニコード 英数字ユニコード
アルファユニコード アルファユニコード
アスキー アスキー
ブーリアン ブーリアン
含む 含む
含む任意 いずれかを含む
含むスルーン ルーンを含む
終了しない で終わる
で終わる 次で終わる
除外 除外
除外すべて すべて除外
除外 ルーンを除く
小文字 小文字
マルチバイト マルチバイト文字
doc.go には記載されていません
数値 数値
プリンタシチ 印刷可能なアスキー
開始しない 次で始まらない
で始まる 次で始まる
大文字 大文字

形式:

タグ 形容
ベース64 ベース 64 文字列
ベース64URL ベース64URL 文字列
ビック 事業者識別コード (ISO 9362)
bcp47_language_tag 言語タグ (BCP 47)
btc_addr ビットコインアドレス
btc_addr_bech32 ビットコイン Bech32アドレス(セグウィット)
credit_card クレジットカード番号
日時 日時
e164 E164形式の電話番号
電子メール 電子メール文字列
eth_addr イーサリアムアドレス
16 進 数 16 進文字列
ヘックスカラー ヘックスカラー文字列
ティッカー HSL 文字列
ティッカー HSLA 文字列
.html HTML タグ
html_encoded HTML エンコード
ティッカー 国際標準図書番号
ISBN10 国際標準図書番号10
ISBN13 国際標準図書番号13
iso3166_1_alpha2 2 文字の国コード (ISO 3166-1 alpha-2)
iso3166_1_alpha3 3 文字の国コード (ISO 3166-1 alpha-3)
iso3166_1_alpha_numeric 数値の国コード (ISO 3166-1 の数値)
iso3166_2 国の下位区分コード (ISO 3166-2)
ISO4217認証取得 通貨コード (ISO 4217)
ジェイソン ティッカー
ティッカー JSON Web Token (JWT)
緯度 緯度
経度 経度
postcode_iso3166_alpha2 郵便 番号
postcode_iso3166_alpha2_field 郵便 番号
ティッカー RGB 文字列
ティッカー RGBA 文字列
ティッカー 社会保障番号 SSN
タイムゾーン タイムゾーン
ウイド ユニバーサル一意識別子 UUID
UUID3 ユニバーサル一意識別子 UUID v3
uuid3_rfc4122 ユニバーサル一意識別子 UUID v3 RFC4122
UUID4 ユニバーサル一意識別子 UUID v4
uuid4_rfc4122 ユニバーサル一意識別子 UUID v4 RFC4122
UUID5 ユニバーサル一意識別子 UUID v5
uuid5_rfc4122 ユニバーサル一意識別子 UUID v5 RFC4122
uuid_rfc4122 ユニバーサル一意識別子 UUID RFC4122
MD4 MD4 ハッシュ
MD5 MD5 ハッシュ
SHA256 SHA256 ハッシュ
SHA384 SHA384 ハッシュ
SHA512 SHA512 ハッシュ
リペムド128 RIPEMD-128 ハッシュ
リペムド128 RIPEMD-160 ハッシュ
タイガー128 タイガー128ハッシュ
タイガー160 タイガー160ハッシュ
タイガー192 タイガー192ハッシュ
センバー セマンティック バージョニング 2.0.0
ウリド 普遍的に一意の辞書式にソート可能な識別子ULID

比較:

タグ 形容
イコール
ティッカー より大きい
ティッカー より大きいか等しい
ティッカー 未満
ティッカー 以下または等しい
ne 等しくない

他:

タグ 形容
ディレクトリ ディレクトリ
ファイル ファイルパス
デフォルト デフォルトです
レン 長さ
.max 最大
最低限
次のいずれか のいずれか
必須 必須
required_if 次の場合に必須
required_unless 必要な場合
required_with 必須項目
required_with_all Required With All
required_without Required Without
required_without_all Required Without All
excluded_if Excluded If
excluded_unless Excluded Unless
excluded_with Excluded With
excluded_with_all Excluded With All
excluded_without Excluded Without
excluded_without_all Excluded Without All
unique Unique

Aliases:

Tag Description
iscolor hexcolor|rgb|rgba|hsl|hsla
country_code iso3166_1_alpha2|iso3166_1_alpha3|iso3166_1_alpha_numeric

Benchmarks

Run on MacBook Pro (15-inch, 2017) go version go1.10.2 darwin/amd64
goos: darwin
goarch: amd64
pkg: github.com/go-playground/validator
BenchmarkFieldSuccess-8                                         20000000                83.6 ns/op             0 B/op          0 allocs/op
BenchmarkFieldSuccessParallel-8                                 50000000                26.8 ns/op             0 B/op          0 allocs/op
BenchmarkFieldFailure-8                                          5000000               291 ns/op             208 B/op          4 allocs/op
BenchmarkFieldFailureParallel-8                                 20000000               107 ns/op             208 B/op          4 allocs/op
BenchmarkFieldArrayDiveSuccess-8                                 2000000               623 ns/op             201 B/op         11 allocs/op
BenchmarkFieldArrayDiveSuccessParallel-8                        10000000               237 ns/op             201 B/op         11 allocs/op
BenchmarkFieldArrayDiveFailure-8                                 2000000               859 ns/op             412 B/op         16 allocs/op
BenchmarkFieldArrayDiveFailureParallel-8                         5000000               335 ns/op             413 B/op         16 allocs/op
BenchmarkFieldMapDiveSuccess-8                                   1000000              1292 ns/op             432 B/op         18 allocs/op
BenchmarkFieldMapDiveSuccessParallel-8                           3000000               467 ns/op             432 B/op         18 allocs/op
BenchmarkFieldMapDiveFailure-8                                   1000000              1082 ns/op             512 B/op         16 allocs/op
BenchmarkFieldMapDiveFailureParallel-8                           5000000               425 ns/op             512 B/op         16 allocs/op
BenchmarkFieldMapDiveWithKeysSuccess-8                           1000000              1539 ns/op             480 B/op         21 allocs/op
BenchmarkFieldMapDiveWithKeysSuccessParallel-8                   3000000               613 ns/op             480 B/op         21 allocs/op
BenchmarkFieldMapDiveWithKeysFailure-8                           1000000              1413 ns/op             721 B/op         21 allocs/op
BenchmarkFieldMapDiveWithKeysFailureParallel-8                   3000000               575 ns/op             721 B/op         21 allocs/op
BenchmarkFieldCustomTypeSuccess-8                               10000000               216 ns/op              32 B/op          2 allocs/op
BenchmarkFieldCustomTypeSuccessParallel-8                       20000000                82.2 ns/op            32 B/op          2 allocs/op
BenchmarkFieldCustomTypeFailure-8                                5000000               274 ns/op             208 B/op          4 allocs/op
BenchmarkFieldCustomTypeFailureParallel-8                       20000000               116 ns/op             208 B/op          4 allocs/op
BenchmarkFieldOrTagSuccess-8                                     2000000               740 ns/op              16 B/op          1 allocs/op
BenchmarkFieldOrTagSuccessParallel-8                             3000000               474 ns/op              16 B/op          1 allocs/op
BenchmarkFieldOrTagFailure-8                                     3000000               471 ns/op             224 B/op          5 allocs/op
BenchmarkFieldOrTagFailureParallel-8                             3000000               414 ns/op             224 B/op          5 allocs/op
BenchmarkStructLevelValidationSuccess-8                         10000000               213 ns/op              32 B/op          2 allocs/op
BenchmarkStructLevelValidationSuccessParallel-8                 20000000                91.8 ns/op            32 B/op          2 allocs/op
BenchmarkStructLevelValidationFailure-8                          3000000               473 ns/op             304 B/op          8 allocs/op
BenchmarkStructLevelValidationFailureParallel-8                 10000000               234 ns/op             304 B/op          8 allocs/op
BenchmarkStructSimpleCustomTypeSuccess-8                         5000000               385 ns/op              32 B/op          2 allocs/op
BenchmarkStructSimpleCustomTypeSuccessParallel-8                10000000               161 ns/op              32 B/op          2 allocs/op
BenchmarkStructSimpleCustomTypeFailure-8                         2000000               640 ns/op             424 B/op          9 allocs/op
BenchmarkStructSimpleCustomTypeFailureParallel-8                 5000000               318 ns/op             440 B/op         10 allocs/op
BenchmarkStructFilteredSuccess-8                                 2000000               597 ns/op             288 B/op          9 allocs/op
BenchmarkStructFilteredSuccessParallel-8                        10000000               266 ns/op             288 B/op          9 allocs/op
BenchmarkStructFilteredFailure-8                                 3000000               454 ns/op             256 B/op          7 allocs/op
BenchmarkStructFilteredFailureParallel-8                        10000000               214 ns/op             256 B/op          7 allocs/op
BenchmarkStructPartialSuccess-8                                  3000000               502 ns/op             256 B/op          6 allocs/op
BenchmarkStructPartialSuccessParallel-8                         10000000               225 ns/op             256 B/op          6 allocs/op
BenchmarkStructPartialFailure-8                                  2000000               702 ns/op             480 B/op         11 allocs/op
BenchmarkStructPartialFailureParallel-8                          5000000               329 ns/op             480 B/op         11 allocs/op
BenchmarkStructExceptSuccess-8                                   2000000               793 ns/op             496 B/op         12 allocs/op
BenchmarkStructExceptSuccessParallel-8                          10000000               193 ns/op             240 B/op          5 allocs/op
BenchmarkStructExceptFailure-8                                   2000000               639 ns/op             464 B/op         10 allocs/op
BenchmarkStructExceptFailureParallel-8                           5000000               300 ns/op             464 B/op         10 allocs/op
BenchmarkStructSimpleCrossFieldSuccess-8                         3000000               417 ns/op              72 B/op          3 allocs/op
BenchmarkStructSimpleCrossFieldSuccessParallel-8                10000000               163 ns/op              72 B/op          3 allocs/op
BenchmarkStructSimpleCrossFieldFailure-8                         2000000               645 ns/op             304 B/op          8 allocs/op
BenchmarkStructSimpleCrossFieldFailureParallel-8                 5000000               285 ns/op             304 B/op          8 allocs/op
BenchmarkStructSimpleCrossStructCrossFieldSuccess-8              3000000               588 ns/op              80 B/op          4 allocs/op
BenchmarkStructSimpleCrossStructCrossFieldSuccessParallel-8     10000000               221 ns/op              80 B/op          4 allocs/op
BenchmarkStructSimpleCrossStructCrossFieldFailure-8              2000000               868 ns/op             320 B/op          9 allocs/op
BenchmarkStructSimpleCrossStructCrossFieldFailureParallel-8      5000000               337 ns/op             320 B/op          9 allocs/op
BenchmarkStructSimpleSuccess-8                                   5000000               260 ns/op               0 B/op          0 allocs/op
BenchmarkStructSimpleSuccessParallel-8                          20000000                90.6 ns/op             0 B/op          0 allocs/op
BenchmarkStructSimpleFailure-8                                   2000000               619 ns/op             424 B/op          9 allocs/op
BenchmarkStructSimpleFailureParallel-8                           5000000               296 ns/op             424 B/op          9 allocs/op
BenchmarkStructComplexSuccess-8                                  1000000              1454 ns/op             128 B/op          8 allocs/op
BenchmarkStructComplexSuccessParallel-8                          3000000               579 ns/op             128 B/op          8 allocs/op
BenchmarkStructComplexFailure-8                                   300000              4140 ns/op            3041 B/op         53 allocs/op
BenchmarkStructComplexFailureParallel-8                          1000000              2127 ns/op            3041 B/op         53 allocs/op
BenchmarkOneof-8                                                10000000               140 ns/op               0 B/op          0 allocs/op
BenchmarkOneofParallel-8                                        20000000                70.1 ns/op             0 B/op          0 allocs/op

補完ソフトウェア

これは、事前検証または検証後のこのライブラリの使用を補完するソフトウェアのリストです。

  • フォーム - URLをデコードします。値をGo値に、Go値をURLにエンコードします。価値観。デュアルアレイとフルマップのサポート。
  • mold - データ構造やその他のオブジェクト内のデータを変更または設定するのに役立つ一般的なライブラリ

貢献する方法

プルリクエストを行う...

ライセンス

MITライセンスの下で配布されており、詳細についてはコード内のライセンスファイルを参照してください。

メンテナ

このプロジェクトは、コミュニティを適切にサポートするために複数の人が必要になるほど大きくなりました。 メンテナになることに興味があるなら、私に連絡してください https://github.com/deankarn