type Person struct {
Name string
}
func (p *Person) Label() string {
return "This is " + p.Name
}
Как я могу использовать этот метод из html/template? Мне нужно что-то подобное в моем шаблоне:
{{ .Label() }}
Ответ 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 вернет эту ошибку, если она не равна нулю и прекратит выполнение шаблона.
Ответ 2
Вы можете даже передавать параметры для работы, как показано ниже.
type Person struct {
Name string
}
func (p *Person) Label(param1 string) string {
return "This is " + p.Name + " - " + param1
}
И затем в шаблоне напишите
{{with person}}
{{ .Label "value1"}}
{{end}}
Предполагая, что человек в шаблоне является переменной типа Person, переданной в шаблон.