Подтвердить что ты не робот

Вызов метода из шаблона Go

Скажем, у меня

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

Как я могу использовать этот метод из html/template? Мне нужно что-то подобное в моем шаблоне:

{{ .Label() }}
4b9b3361

Ответ 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, переданной в шаблон.