0
0

Go構造体のバリデーション: スペースの落とし穴

Posted at

はじめに

ウェブアプリケーションを開発する際、HTTPメッセージボディのデータの検証を行う場合があります。
例えば、ユーザーが入力した情報が必須項目を満たしているか、数値が適切な範囲に収まっているかなど。
Go言語でバックエンド開発を行うときには、構造体を使用したバリデーションが一般的です。

Go言語でのバリデーション

Go言語では構造体を定義しそのフィールドに対してバリデーションルールを設定することができます。これにより、データの一貫性と正確性を確保し、エラーを未然に防ぐことができます。

struct.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のフィールドに対してバリデーションルールを設定しています。これにより、フォームから送信されたデータが自動的にチェックされ、これらの条件を満たしていない場合はエラーが発生します。

バリデーション記述での落とし穴

バリデーションタグにスペースが含まれていると、期待通りに動作しないことがあります。例えば、以下のようにスペースを含めるとエラーが発生します。

struct.go
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言語での構造体バリデーションは便利ですが、タグ内のスペースに注意する必要があります。スペースがあるとバリデーションが正しく行われず、予期しないエラーが発生する可能性があります。正確なタグを使用して、確実にバリデーションが機能するようにしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0