golang 的 template 里怎么使用函数?

共 5 个回复


otinn

    package main

import ( "bytes" . "fmt" "html/template" )

type Person struct { Name string Location string }

func (this *Person) Say(val string) string { return val }

func main() { var buf bytes.Buffer t, err := template.ParseFiles("./base.html") Println(err)

p := Person{"MyName", "China"}
err = t.Execute(&buf, p)

if err != nil {
    panic(err)
}

Println(buf.String())

}

# 1

otinn

html的代码是 {{ .Say }} ,报错

panic: template: base.html:1: can't evaluate field Say in type main.Person
# 2

otinn

不好意思,我是新手刚学golang的,谢谢指导. #2楼的代码排版有些问题.

# 3

jimmykuu

编辑器里代码都缩进4个空格,写的时候看下下面的预览,这样的代码太难看了

几个问题:

  1. Println是fmt包的方法,因此调用需要使用fmt.Println(),或者直接使用内置方法,println()
  2. 你定义Say的时候用的是指针,传入模板的参数是值,模板是不认的。

    err = t.Execute(&buf, &p)

  3. 模板中缺少参数,这样就可以 {{.Say "Hello"}}

# 4