0Pricing
Go Academy · レッスン

バリデーションライブラリ

タグで構造体を検証します

「バリデーションライブラリ」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造体タグとは
  2. JSONタグ
  3. バリデーションライブラリ
  4. カスタムタグの解析
← Go Academyに戻る