text/template和html/template等模板包提供了一个将变量值填充到一个文本或HTML格式的模板的机制。

1
2
3
4
const templ = `{{.Year}} {{.Month}} {{.Day}} :
---------------------{{.Safe_title | Function}}------------------------
{{.Img}}
`

对于每一个action,都有一个当前值的概念,对应点操作符,写作“.”。当前值“.”最初被初始化为调用模板是的参数,|操作符表示将前一个表达式的结果作为后一个函数的输入,类似于UNIX中管道的概念
注意方法调用链的顺序:template.New先创建并返回一个模板;Funcs方法将自定义函数注册到模板中,并返回模板;最后调用Parse函数分析模板。

1
2
3
4
5
6
7
8
func Test(title string) string{
return fmt.Sprintf("%s",title)
}

tmpl, err := template.New("templateName").Funcs(template.FuncMap{"Function":Test}).Parse(templ)

or
tmpl, err := template.ParseFiles("templ.txt") //建立一个模板,这里不需要new("name")的方式,因为name自动为文件名

执行模板
1
2
err = tmpl.ExecuteTemplate(os.Stdout, "test", result)  //指定模板名,这次为test
err = tmpl.Execute(os.Stdout, result) //模板名省略,打印的是当前模板