50

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

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

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

{{ .Label() }}
4

3 に答える 3

65

かっこを省略するだけで問題ありません。例:

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

ドキュメントによると、(任意の型の) 1 つの値または 2 番目の値が型の場合は 2 つの値を返す任意のメソッドを呼び出すことができますerror。後者の場合、Execute非 nil の場合はそのエラーを返し、テンプレートの実行を停止します。

于 2012-04-17T22:43:24.140 に答える
37

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

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

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

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

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

于 2013-08-06T01:00:21.547 に答える