从Go模板调用方法

时间:2012-04-17 22:32:16

标签: go go-templates

假设我有

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

如何从html /模板中使用此方法?在我的模板中我需要这样的东西:

{{ .Label() }}

2 个答案:

答案 0 :(得分:50)

省略括号,它应该没问题。例如:

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

根据documentation,如果第二个值为error,则可以调用任何返回一个值(任何类型)或两个值的方法。在后一种情况下,Execute将返回该错误,如果它是非零并停止执行模板。

答案 1 :(得分:24)

您甚至可以将参数传递给函数,如下所示

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

然后在模板中写

{{with person}}
    {{ .Label "value1"}}
{{end}}

假设模板中的人是传递给模板的Person类型的变量。