Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Go模板调用方法_Go_Go Templates - Fatal编程技术网

从Go模板调用方法

从Go模板调用方法,go,go-templates,Go,Go Templates,假设我有 type Person struct { Name string } func (p *Person) Label() string { return "This is " + p.Name } 如何从html/模板使用此方法?我的模板中需要类似的内容: {{ .Label() }} 省略括号就可以了。例如: package main import ( "html/template" "log" "os" ) type Person string

假设我有

type Person struct {
  Name string
}
func (p *Person) Label() string {
  return "This is " + p.Name
}
如何从html/模板使用此方法?我的模板中需要类似的内容:

{{ .Label() }}

省略括号就可以了。例如:

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
将返回非nil的错误,并停止模板的执行。

您甚至可以将参数传递给如下函数

type Person struct {
  Name string
}
func (p *Person) Label(param1 string) string {
  return "This is " + p.Name + " - " + param1
}
然后在模板中写入

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

假设模板中的person是person passed to template类型的变量。

谢谢,它可以工作!我试过了,但我的方法的接受者是“人”,而不是“人”。所以它不适用于指针接收器,这似乎是一个陷阱。它也适用于指针接收器。但是请注意,当您有
func(p*Person)Label()时,只有
*Person
类型的值才会有Label()方法。你不能在
上调用该方法,因为你还没有定义它。我可以写{{&.}来获取的地址吗。在我的模板里?不,你不能。但是如果你在一个
*Person
上定义你的方法(如果你想改变它的属性,这是必需的),只要一直使用
*Person
就可以了。这比!如何传递多个参数?@chovy simply{{.Label“value1”“value2”}