validation包的地址:https://pkg.go.dev/github.com/astaxie/beego/validation
特别注意方法Valid
// Validate a struct.
// the obj parameter must be a struct or a struct pointer
func (v *Validation) Valid(obj interface{}) (b bool, err error)方法Valid的参数为interface,如果要将一个结构体传递给Valid
该结构体必须实现Valid方法例如:
如何进行定义?
type PasswordModifyForm struct? {? ?
OldPassword ?string `form:"oldPassword"`? ?
NewPassword ?string `form:"newPassword"`? ?
NewPassword2 string `form:"newPassword2"`
}func (f *PasswordModifyForm) Valid(validation *validation.Validation) {
? ? ? ?.....
}如何进行使用?
form := &PasswordModifyForm?{}
valid := &validation.Validation{}
hasError, err? := valid.Valid(form)不理解的地方:
按照go中方法的定义,我们应该用form去调用Valid
但这里是用valid(&validation.Validation)调用Valid方法why?因为validation中Valid方法的参数为interface{},若将一个结构体传入Valid方法中,该结构体必须先实现Valid方法才能够赋值给interface{} (不要理解为函数调用,如form.Valid())
关于validation的Match方法
func (v *Validation) Match(obj interface{}, regex *regexp.Regexp, key string) *Result
参数1:待验证的string
参数2:正则表达式(该参数为go标准库中的regexp.Regexp,而不支持其他如regexp2作为参数)
参数3:key的形式为"key.key.key"
? ? ? ? ? ? ? 详见源码:validation.go Match方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Match方法中用到的apply方法?validation.go apply方法
参考资料:
【1】beego validation.go源码
【2】beego 表达验证源文档--详细说明