Skip to content

govalid とは?

govalid は、Go 用の小さく意見の通った構造体バリデーターです。 あなたの構造体タグから直接バリデーションルールを読み取り、リフレ クションで実行します——コード生成なし、スキーマファイルなし、 ロケール処理用の golang.org/x/text 以外にサードパーティ依存も ありません。

go
type RegisterForm struct {
    Username string `valid:"required;username;minlen:3;maxlen:20" label:"用户名"`
    Email    string `valid:"required;email"                       label:"邮箱"`
    Age      uint   `valid:"required;min:18;max:120"              label:"年龄"`
}

errs, ok := govalid.Check(form)

設計原則

  • タグが真実の源。 構造体フィールドのルールはフィールドのすぐ 隣にあります。レビュアーはハンドラーを grep せずとも制約を見ら れます。
  • コンポーザブル、魔法はなし。 ルールは map に入った素のゲンメ ソッドです。自前のルールを追加するのは 1 行。学ぶべき DSL もあり ません。
  • 賢さより安全。 nil ポインタ、map、channel、埋め込み構造体、 非公開フィールドもすべてパニックせず処理されます。本ライブラリは 数百万件規模のファズテスト済みです。
  • 国際化が前提。 中国語と英語が同梱、任意のロケールを差し込み 可能。フィールドラベル自体も label-en / label-zh / label-… タグでロケール別に切り替えられます。

govalid を使うべきとき

govalid はバリデーション業務の退屈な 80% に最適化されています:

  • HTTP リクエストボディとクエリパラメータ
  • 起動時の設定ファイル
  • ドメインフォーム(登録・プロフィール・住所録)
  • クロスフィールド制約(パスワード確認、条件付き必須)

JSON Schema、Protobuf ディスクリプタ、ランタイム生成ルールなど、 動的・スキーマオンザワイヤなバリデーションが要るなら別のツール を選んでください。

次に読むもの

MIT ライセンスのもとで公開されています。