バリデーションライブラリ
タグで構造体を検証します
「バリデーションライブラリ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
構造体を検証する理由
フォームやAPIから受け取ったデータを使用する前に、必須フィールド、メールアドレスの形式、値の範囲などを確認しなければならないことがよくあります。検証ライブラリを使うと、構造体タグによってこれらを自動化できます。
validateタグ
go-playground/validatorのような一般的なライブラリは、フィールドごとのルールを記述したvalidateタグを読み取ります。
フィールドにはvalidate:"required,email"のようなタグを付けられます。
外部依存関係
検証ライブラリは標準ライブラリに含まれていないサードパーティパッケージです。go get github.com/go-playground/validator/v10で追加します。ここでは自己完結したスニペットとして実行できません。
ルールの定義
各フィールドのvalidateタグには、カンマ区切りでルールを指定します。一般的なルールには、required、email、min、max、lenがあります。
構造体の例
典型的な検証対象の構造体です。(概念例です。実行にはvalidatorパッケージが必要です。)
type SignupForm struct {
Email string "validate:\"required,email\""
Password string "validate:\"required,min=8\""
Age int "validate:\"gte=18,lte=120\""
}検証の実行
validatorインスタンスを作成し、Validate.Struct(form)を呼び出します。いずれかのルールに違反するとエラーを返し、すべてのルールを満たすとnilを返します。
import "github.com/go-playground/validator/v10"
var validate = validator.New()
func check(f SignupForm) error {
return validate.Struct(f)
}エラーの読み取り
検証に失敗すると、返されたエラーをvalidator.ValidationErrorsにキャストできます。これは、違反した各ルールについて、どのフィールドのどの制約に違反したかを示すスライスです。
一般的な組み込みルール
便利なルールには次のようなものがあります。
required- ゼロ値であってはなりませんemail- 有効なメール形式でなければなりませんmin/max- 長さまたは数値の下限・上限gte/lte- 数値の比較oneof- 指定した一覧のいずれかでなければなりません
ネストした構造体の検証
検証ライブラリはネストした構造体を自動的に再帰検証します。構造体自体を値として持つフィールドについても、そのフィールドのルールが確認されるため、1回の呼び出しでオブジェクトグラフ全体を検証できます。
ライブラリを使う理由
すべてのフィールドの検証を手作業で記述するのは面倒で、ミスも起こりやすくなります。タグを使った検証なら、ルールを宣言的にフィールドの近くに記述でき、アプリ全体で一貫性を保てます。
手動で行う方法
単純なケースでは、ライブラリを使わずに手作業で検証できます。フィールドが多く、ルールが複雑な場合はライブラリが適しています。標準ライブラリだけを使うため、どこでも実行できます。
package main
import (
"errors"
"fmt"
"strings"
)
func validateEmail(e string) error {
if !strings.Contains(e, "@") {
return errors.New("invalid email")
}
return nil
}
func main() {
fmt.Println(validateEmail("bad"))
fmt.Println(validateEmail("a@b.com"))
}クイックチェック
go-playground/validatorのような検証ライブラリは、各フィールドに適用するルールをどのように把握しますか?
まとめ
検証ライブラリには次の特徴があります。
validateタグを読み取ってルールを適用します- サードパーティ製(例:go-playground/validator)で、go getによって追加します
- 失敗した各ルールを一覧にしたエラーを返します
- 単純なケースは手作業で検証できます
よくある質問
「バリデーションライブラリ」レッスンは無料ですか?
はい。「バリデーションライブラリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「バリデーションライブラリ」で何を学びますか?
タグで構造体を検証します ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「バリデーションライブラリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。