Search code examples
gogo-templates

Call a method from a Go template


Let's say I have

type Person struct {
  Name string
}
func (p *Person) Label() string {
  return "This is " + p.Name
}

How can I use this method from a html/template ? I would need something like this in my template:

{{ .Label() }}

Solution

  • Just omit the parentheses and it should be fine. Example:

    package main
    
    import (
        "html/template"
        "log"
        "os"
    )
    
    type Person string
    
    func (p Person) Label() string {
        return "This is " + string(p)
    }
    
    func main() {
        tmpl, err := template.New("").Parse(`{{.Label}}`)
        if err != nil {
            log.Fatalf("Parse: %v", err)
        }
        tmpl.Execute(os.Stdout, Person("Bob"))
    }
    

    According to the documentation, you can call any method which returns one value (of any type) or two values if the second one is of type error. In the later case, Execute will return that error if it is non-nil and stop the execution of the template.