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的參數(shù)為interface,如果要將一個(gè)結(jié)構(gòu)體傳遞給Valid
該結(jié)構(gòu)體必須實(shí)現(xiàn)Valid方法例如:
如何進(jìn)行定義?
type PasswordModifyForm struct? {? ?
OldPassword ?string `form:"oldPassword"`? ?
NewPassword ?string `form:"newPassword"`? ?
NewPassword2 string `form:"newPassword2"`
}func (f *PasswordModifyForm) Valid(validation *validation.Validation) {
? ? ? ?.....
}如何進(jìn)行使用?
form := &PasswordModifyForm?{}
valid := &validation.Validation{}
hasError, err? := valid.Valid(form)不理解的地方:
按照go中方法的定義,我們應(yīng)該用form去調(diào)用Valid
但這里是用valid(&validation.Validation)調(diào)用Valid方法why?因?yàn)関alidation中Valid方法的參數(shù)為interface{},若將一個(gè)結(jié)構(gòu)體傳入Valid方法中,該結(jié)構(gòu)體必須先實(shí)現(xiàn)Valid方法才能夠賦值給interface{} (不要理解為函數(shù)調(diào)用,如form.Valid())
關(guān)于validation的Match方法
func (v *Validation) Match(obj interface{}, regex *regexp.Regexp, key string) *Result
參數(shù)1:待驗(yàn)證的string
參數(shù)2:正則表達(dá)式(該參數(shù)為go標(biāo)準(zhǔn)庫中的regexp.Regexp,而不支持其他如regexp2作為參數(shù))
參數(shù)3:key的形式為"key.key.key"
? ? ? ? ? ? ? 詳見源碼:validation.go Match方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Match方法中用到的apply方法?validation.go apply方法
參考資料: