gpt4 book ai didi

go - 为什么我的结构方法总是返回 false?

转载 作者:IT王子 更新时间:2023-10-29 02:15:06 25 4
gpt4 key购买 nike

我试图在一个返回 bool 的方法中对我的表单结构进行验证,但即使它应该返回 true,我仍然得到 false..

如果您查看 Validate 方法的末尾,您会看到我写了 validated := len(this.Errors) == 0 这应该是根据 Errors 映射是否包含项“验证”为真或假,然后我返回已验证

当我准确填写表格时,应该没有错误,但当我应该为真时,我仍然为假。

谁能解释一下?这不是 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 方法的地方——在我的 Controller 的一个函数中:

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) == ""
}

如有任何帮助,我们将不胜感激!

最佳答案

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

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

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

你好,菲利普

关于go - 为什么我的结构方法总是返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34967215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com