go template和渲染初解|青训营笔记

88 阅读2分钟

这是我参与[第五届青训营]的第十四天

template模板以字符串或“原始字符串”的形式提供给适当的函数。actions动作代表数据评估、功能或控制循环。它们由 分隔{{ }}。其他非定界部分保持不变。

可以if在模板中使用循环。例如,您可以检查是否FieldName非空,如果是,则打印其值:{{if .FieldName}} Value of FieldName is {{ .FieldName }} {{end}}

使用range操作,您可以遍历切片。使用{{range .Member}} ... {{end}}模板定义范围操作。

操作有几个内置函数,它们与管道一起使用以额外解​​析输出。管道带有注释,|默认行为是将数据从左侧发送到右侧的函数。

函数用于转义操作的结果。默认情况下有几个可用的函数,例如html返回 HTML 转义输出、安全防止代码注入或js返回 JavaScript 转义输出。

解析模板

三个最重要和最常用的功能是:

  • New— 分配新的、未定义的模板,
  • Parse— 解析给定的模板字符串并返回解析后的模板,
  • Execute— 将已解析的模板应用于数据结构并将结果写入给定的编写器。

验证模板

template包提供Must函数,用于在解析期间验证模板是否有效。该Must函数提供的结果与我们手动检查错误的结果相同,就像在前面的示例中一样。

这种方法可以节省您的输入时间,但是如果您遇到错误,您的应用程序将会崩溃。Must对于高级错误处理,使用上述解决方案而不是函数更容易。

func f1(w http.ResponseWriter, r *http.Request) {
	// 定义一个函数kua
	//要么只有一个返回值,要么有两个返回值,第二个返回值必须是error类型
	k := func(name string) (string, error) {
		return name + " is good. ", nil
	}

	//定义模板
	// 解析模板
	t := template.New("f.tmpl") //创建一个名字是f的模板对象, 名字一定要与模板的名字能对应上
	//告诉模板引擎,现在多了一个自定义的函数kua
	t.Funcs(template.FuncMap{
		"kua": k,
	})
	// 解析模板
	_, err := t.ParseFiles("./f.tmpl")
	if err != nil {
		fmt.Printf("parse template failed, err:%v\n", err)
		return
	}
	name := "小王子"
	//template.ParseFiles()
	// 渲染模板
	t.Execute(w, name)
}