我正在使用https://github.com/go-playground/validator用于REST API服务器。我将同一个结构用于具有不同验证要求的不同端点。例如,/users/login
只需要email
和password
。然而,要创建一个用户,需要更多的信息,如firstName
。
所以我认为使用struct标记进行验证不是很方便。按照本例所述检查变量似乎更合适。然而,我遇到了两个问题:
-
我同时检查多个。有没有一种方法可以将一系列验证链接在一起?检查结构中的每一个变量,然后检查错误,这会使代码编写和读取变得更加困难。
-
错误对象实际上是空的。例如,检查是否需要电子邮件只显示
err.Tag()
和err.ActualTag()
为required
,err.Kind()
和err.Type()
为string
,而不显示其他内容。验证器是否提供了一些方便的东西?
我使用ozzo验证。它使用普通的编程结构而不是容易出错的结构标记来指定数据应该如何验证。我建议您为每个用例(请求(定义不同的验证函数/方法。
func ValidateLogin(req) {
err := validation.Validate(req.Username,
validation.Required, //
is.Email)
...
}
func ValidateRegister(req) {
...
}