当前位置: 首页>后端>正文

package-- validation

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 表达验证源文档--详细说明


https://www.xamrdz.com/backend/3gn1933814.html

相关文章: