Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

go-playground/validatorのomitemptyが効かなくて困った(解決)

go-playground/validator とは

structタグに条件を書いて validate.Struct(struct)するだけで
簡単にバリデーションをしてくれる便利なバリデーターです。

使用用途

net/httpのサーバーに送られてきたリクエストstructを処理前にバリデーションしたい。
ただし、送られてきたリクエストstructの内容は全て埋まっているとは限らない。
(変更したいフィールドの情報だけが埋められた状態でリクエストされる)

やってみた

image.png

GatewayUrl/NodeUrlそれぞれにURLバリデーションを付けて validate.Structさせてみた。
文字列が空であってもバリデーションは走ってしまうらしい。
こういうときはomitempty を付けるといいようだ。

omitemptyを付けてみた

image.png

確かに付いているのに、エラー内容が変わらない... 既にこのパッケージを使っている友人に助けを求めたところ omitemptyが優先させて処理されるとかいう仕様じゃないので 先頭にかかないとダメらしい。参考に見せてくれたテストコードでも確かにomitemptyは先頭に書かれていた。

omitemptyを先頭に移動させてみた

image.png

確かにバリデーションエラーが消えて期待通りに動作してくれるようになった。

結論

structタグに制御条件を書くときは、書く順番にも注意しよう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?