我正在尝试在返回 bool 的方法中对我的表单结构进行验证,但即使它应该返回 true ,我也会不断收到 false ..如果您查看Validate方法的末尾,您会看到我写了validated := len(this.Errors) == 0哪些应该根据 Errors 映射是否包含项目来使“验证”为真或假,然后是 I return validated.当我准确填写表格时,应该没有错误,但是当我应该正确时我仍然会出错。有人可以解释一下吗?这不是 Go 的工作方式吗?表单.go:package modelsimport ( "../config" "../util")type Form struct { Name string Email string Phone string Message string Thanks string ErrorHandler}func (this *Form) Validate() bool { this.Errors = make(map[string]string) matched := util.MatchRegexp(".+@.+\\..+", this.Email) if !util.IsEmpty(this.Email) { if matched == false { this.Errors["Email"] = config.EMAIL_INVALID } } else { this.Errors["Email"] = config.EMAIL_EMPTY } if util.IsEmpty(this.Name) { this.Errors["Name"] = config.NAME_EMPTY } if util.IsEmpty(this.Phone) { this.Errors["Phone"] = config.PHONE_EMPTY } if util.IsEmpty(this.Message) { this.Errors["Message"] = config.MESSAGE_EMPTY } validated := len(this.Errors) == 0 if validated { this.Thanks = config.THANK_YOU } return validated}errorhandler.go:package modelstype ErrorHandler struct { Errors map[string]string}func (this *ErrorHandler) HandleErr(err string) { this.Errors = make(map[string]string) this.Errors["Error"] = err}这就是我尝试调用该Validate方法的地方——在我的控制器中的一个函数中:form := &models.Form{ Name: r.FormValue("name"), Email: r.FormValue("email"), Phone: r.FormValue("phone"), Message: r.FormValue("message")}if form.Validate() { // This never runs because 'form.Validate()' is always false}我不认为这util.IsEmpty()是这里的罪魁祸首..只是检查字符串是否为空:func IsEmpty(str string) bool { return strings.TrimSpace(str) == ""}任何帮助,将不胜感激!
1 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
最好使用如下日志语句调试此类问题:
log.Printf("form: %v", form)
在调用之前validate
,所以很清楚输入数据的样子。
问候, 菲利普
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消