我正在尝试在返回bool的方法中对我的表单结构进行验证,但即使它应该返回true,我仍然会变错。
如果你看一下Validate
方法的结尾,你会看到我写validated := len(this.Errors) == 0
根据错误地图是否有项目而应该使“验证”为真或假,然后我return validated
。
当我准确地填写我的表格时,应该没有错误但我仍然会在我应该成真的时候弄错。
有人可以解释一下吗?这不是Go的工作原理吗?
form.go:
package models
import (
"../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 models
type 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) == ""
}
任何帮助将不胜感激!
答案 0 :(得分:1)
最好使用以下日志语句调试此类问题:
log.Printf("form: %v", form)
在调用validate
之前,所以很清楚输入数据是什么样的。
问候,菲利普