为什么我的struct方法总是返回false?

时间:2016-01-23 18:35:29

标签: go

我正在尝试在返回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) == ""
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

最好使用以下日志语句调试此类问题:

log.Printf("form: %v", form)

在调用validate之前,所以很清楚输入数据是什么样的。

问候,菲利普