我正在尝试在返回 bool 的方法中对我的表单结构进行验证,但即使它应该返回 true ,我也会不断收到 false ..
如果您查看Validate方法的末尾,您会看到我写了validated := len(this.Errors) == 0哪些应该根据 Errors 映射是否包含项目来使“验证”为真或假,然后是 I return validated.
当我准确填写表格时,应该没有错误,但是当我应该正确时我仍然会出错。
有人可以解释一下吗?这不是 Go 的工作方式吗?
表单.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) == ""
}
任何帮助,将不胜感激!
慕妹3146593
相关分类