go – 如何使用文本/模板的预定义“调用”功能?

我试图了解如何在文本/模板包中使用调用函数.这是一个例子:

type Human struct {
    Name string
}

func (h *Human) Say(str string) string {
    return str
}

func main() {
    const letter = `
    {{.Name}} wants to say {{"blabla" | .Say}}
    {{.Name}} wants try again, {{call .Say "blabla"}}.`

    var h = &Human{"Tim"}

    t := template.Must(template.New("").Parse(letter))
    err := t.Execute(os.Stdout, h)
    if err != nil {
        log.Println("executing template:", err)
    }

}

see this code in play.golang.org

我认为该调用调用函数/方法,但事实证明我们可以通过.Method arg1 arg2来完成.那么函数调用是针对什么的?

最佳答案 如果要调用函数值,则需要使用调用.

引用docs(参见功能):

Thus “call .X.Y 1 2” is, in Go notation, dot.X.Y(1, 2) where Y is a
func-valued field, map entry, or the like.

在这个例子中,X可能如下所示:

type X struct {
    Y func(a int, b int) int
}
点赞