はじめに
ウェブアプリケーションを開発する際、HTTPメッセージボディのデータの検証を行う場合があります。
例えば、ユーザーが入力した情報が必須項目を満たしているか、数値が適切な範囲に収まっているかなど。
Go言語でバックエンド開発を行うときには、構造体を使用したバリデーションが一般的です。
Go言語でのバリデーション
Go言語では構造体を定義しそのフィールドに対してバリデーションルールを設定することができます。これにより、データの一貫性と正確性を確保し、エラーを未然に防ぐことができます。
type Person struct {
Name string `json:"name" binding:"required,min=3"`
Age int `json:"age" binding:"required,min=0,max=100"`
}
// required: `Name`, `Age`共にフィールドは必須で、空の値は許可されない
// min=3: `Name`フィールドの値は最低でも3文字以上でなければならない
// min=0: `Age`フィールドの値は0以上でなければならない
// max=100: `Age`フィールドの値は100以下でなければならない
このPerson構造体では、NameとAgeのフィールドに対してバリデーションルールを設定しています。これにより、フォームから送信されたデータが自動的にチェックされ、これらの条件を満たしていない場合はエラーが発生します。
バリデーション記述での落とし穴
バリデーションタグにスペースが含まれていると、期待通りに動作しないことがあります。例えば、以下のようにスペースを含めるとエラーが発生します。
type Person struct {
Name string `json:"name" binding:"required, min=3"`
Age int `json:"age" binding:"required, min=0, max=100"`
}
この例では、bindingタグ内のやmin=*
やmax=*
の前にスペースが入っています。このようなスペースがあると、バリデーションはタグを正しく解釈できず、エラーとなってしまいます。
まとめ
Go言語での構造体バリデーションは便利ですが、タグ内のスペースに注意する必要があります。スペースがあるとバリデーションが正しく行われず、予期しないエラーが発生する可能性があります。正確なタグを使用して、確実にバリデーションが機能するようにしましょう。