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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容