web-dev-qa-db-ja.com

Goテンプレートからメソッドを呼び出す

私が持っているとしましょう

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

Html/templateからこのメソッドを使用するにはどうすればよいですか?私のテンプレートには次のようなものが必要です:

{{ .Label() }}
41
Blacksad

括弧を省略するだけで問題ありません。例:

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 に従って、1つの値(任意の型)または2番目の値がerror型である場合は2つの値を返すメソッドを呼び出すことができます。後者の場合、Executeは、nilでない場合にそのエラーを返し、テンプレートの実行を停止します。

54
tux21b

次のような関数にパラメータを渡すこともできます

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

そして、テンプレートに書きます

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

テンプレート内の人物が、テンプレートに渡されるPerson型の変数であると仮定します。

27
Usman Qadri