クイックスタート
このページでは、govalid をインストールして 5 分以内に最初の構造体 バリデーションを実行するまでを案内します。
必要な環境
- Go 1.16 以上
- module 対応のプロジェクト(
go.mod)
インストール
sh
go get -u github.com/wuhan005/govalidそしてコード内で import します:
go
import "github.com/wuhan005/govalid"最初のバリデーション
バリデートしたいフィールドに valid タグを付け、必要に応じて label でわかりやすい名前を付けます:
go
package main
import (
"fmt"
"github.com/wuhan005/govalid"
)
func main() {
form := struct {
Name string `valid:"required;username" label:"昵称"`
ID int `valid:"required;min:0;max:999" label:"用户编号"`
Email string `valid:"required;email" label:"邮箱"`
}{
Name: "e99_",
ID: 1990,
Email: "i@github.red.",
}
errs, ok := govalid.Check(form)
if ok {
fmt.Println("OK")
return
}
for _, err := range errs {
fmt.Println(err)
}
}text
昵称的最后一个字符不能为下划线
用户编号应小于999
邮箱不是合法的电子邮箱格式何が起こったのか?
Checkがリフレクションで構造体を辿りました。validタグを持つ各フィールドについて、すべてのルール (;区切り)がグローバルなCheckersレジストリで解決され、 順番に実行されました。- 失敗した各ルールは
*ErrContextを生成し、フィールド名・ラベル・ 値・ローカライズされたメッセージを保持します。*ErrContext自体 がerrorインターフェースを実装しています。 - すべてのルールが通った時のみ
okがtrueになります。
ルールの構造
valid タグは ; 区切りのルールリストです。各ルールは次のいずれか:
- 単純なチェッカー名:
required - パラメータ付きチェッカー:
min:18、list:admin,editor,viewer
go
`valid:"required;min:18;max:120"`TIP
フォーマット系チェッカー(email、ipv4、mobile など)は空文字 を「OK」とショートサーキットします。required と組み合わせること でフィールドのオン/オフを切り替えられます:
go
type Form struct {
Optional string `valid:"email"` // 空を許容
Required string `valid:"required;email"` // 空を拒否
}フィールド単位のカスタムエラーメッセージ
msg タグでフィールドのエラーメッセージ全体を上書きできます。最初 に失敗したルールが直接このメッセージにショートサーキットします ——プロダクトコピーを細かい原因より優先したい時に便利です:
go
type Form struct {
Password string `valid:"required;minlen:8" label:"密码" msg:"密码长度需在 8-64 之间"`
}クロスフィールド & ビジネスルール
複数フィールドに依存するロジックは Validate() error メソッドに 書きます。govalid はタグルールの後にこれを呼びます:
go
type Form struct {
Password string `valid:"required;minlen:8" label:"密码"`
RepeatPassword string `valid:"required" label:"重复密码"`
}
func (f *Form) Validate() error {
if f.Password != f.RepeatPassword {
return errors.New("两次输入的密码不一致")
}
return nil
}完全な仕様は クロスフィールド & ビジネスルール を参照してください。