go-playground/validator とは
structタグに条件を書いて validate.Struct(struct)するだけで
簡単にバリデーションをしてくれる便利なバリデーターです。
使用用途
net/httpのサーバーに送られてきたリクエストstructを処理前にバリデーションしたい。
ただし、送られてきたリクエストstructの内容は全て埋まっているとは限らない。
(変更したいフィールドの情報だけが埋められた状態でリクエストされる)
やってみた
GatewayUrl/NodeUrlそれぞれにURLバリデーションを付けて validate.Structさせてみた。
文字列が空であってもバリデーションは走ってしまうらしい。
こういうときはomitempty を付けるといいようだ。
omitemptyを付けてみた
確かに付いているのに、エラー内容が変わらない... 既にこのパッケージを使っている友人に助けを求めたところ omitemptyが優先させて処理されるとかいう仕様じゃない
ので 先頭にかかないとダメらしい。参考に見せてくれたテストコードでも確かにomitemptyは先頭に書かれていた。
omitemptyを先頭に移動させてみた
確かにバリデーションエラーが消えて期待通りに動作してくれるようになった。
結論
structタグに制御条件を書くときは、書く順番にも注意しよう。