猿问

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

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

}

任何帮助,将不胜感激!


潇湘沐
浏览 159回答 1
1回答

慕妹3146593

最好使用如下日志语句调试此类问题:log.Printf("form: %v", form)在调用之前validate,所以很清楚输入数据的样子。问候, 菲利普
随时随地看视频慕课网APP

相关分类

Go
我要回答