从围棋模板调用一个方法(Call a method from a Go template)

2019-06-23 17:34发布

比方说,我有

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

我怎么可以用这种方法从一个html /模板? 我需要这样的事情在我的模板:

{{ .Label() }}

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

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



Answer 2:

你甚至可以传递参数的功能类似如下

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

然后在模板写

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

假设人在模板传递给模板类型的人的变量。



文章来源: Call a method from a Go template