4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-04-21

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タグに制御条件を書くときは、書く順番にも注意しよう。

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?