一尘不染

从Go模板调用方法

go

假设我有

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

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

{{ .Label() }}

阅读 240

收藏
2020-07-02

共1个答案

一尘不染

只需省略括号就可以了。例:

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

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

2020-07-02