Q:

Why is my struct method always returning false?

I'm trying to do validation on my form struct in a method that returns a bool, but I keep getting false even when it should be returning true.. 
If you look towards the end of the Validate method, you'll see I write validated := len(this.Errors) == 0 which should be making "validated" either true or false based on whether the Errors map has items or not, and then I return validated.
When I fill out my form accurately, there should be no errors yet I still get false when I should be getting true. 
Can someone explain? Is this not how Go works?
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
}

And this is where I try to call the Validate method -- in a function in my 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
}

I don't think the util.IsEmpty() is the culprit here.. just checks if the string is empty:
func IsEmpty(str string) bool {
    return strings.TrimSpace(str) == ""
}

Any help would be appreciated!

A:

It's best to debug this kind of problem with a log statement like:
log.Printf("form: %v", form)
before calling validate, so it's clear what the input data looks like.
Greetings, Philip

