2016-01-23 212 views
1

我試圖做驗證我的形式結構在返回一個布爾值的方法,但是如果你對Validate方法的盡頭,回首我不斷收到即使它應該返回true假..爲什麼我的結構方法總是返回false?

,你會看到我寫了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("[email protected]+\\..+", 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

你可以在調用'validate'之前添加'log.Printf(「form:%v」,form)''嗎? – Philip

+0

嗯..我看到當我沒有輸入任何東西時,它會打印出「form:&{{map []}} map [blah:blah,etc ...] ......並且它會打印同樣的東西輸入信息所以它不能從HTML發送它然後... – Lansana

+1

Ahhhhh我忘記了輸入字段的名稱屬性初學者的錯誤謝謝你應該添加一個答案,我可以接受它 – Lansana

回答

1

這是最好的調試這樣的問題,像一個日誌聲明:

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

調用validate之前,所以這是清楚的輸入數據的模樣。

問候,菲利普

相關問題