详解golang中模板的常用语法
作者:yalishanda
1、变量赋值
Action里可以初始化一个变量来捕获管道的执行结果。初始化语法如下:
其中$variable是变量的名字。声明变量的action不会产生任何输出。
{{$variable := pipeline}}
2、range
循环切片数组等
如果"range" action初始化了1个变量,该变量设置为迭代器的每一个成员元素,如果初始化了逗号分隔的2个变量:
这时,key和val分别设置为数组/切片的索引或者字典的键,以及对应的成员元素。注意这和go range从句只有一个参数时设置为索引/键不同!
// 这里的val是每一个元素,不是索引 {{range $val := .data}} {{end}} {{range $key,$val := .data}} {{end}}
一个变量的作用域只到声明它的控制结构(“if”、“with”、“range”)的"end"为止,如果不是在控制结构里声明会直到模板结束为止。子模板的调用不会从调用它的位置(作用域)继承变量。
模板开始执行时,$会设置为传递给Execute方法的参数,就是说,dot的初始值。
3、输出原始字符串
下面是一些单行模板,展示了pipeline和变量。所有都生成加引号的单词"output":
{{"\"output\""}} // 字符串常量 {{`"output"`}} // 原始字符串常量 {{printf "%q" "output"}} // 函数调用 {{"output" | printf "%q"}} // 函数调用,最后一个参数来自前一个command的返回值 {{printf "%q" (print "out" "put")}} // 加括号的参数 {{"put" | printf "%s%s" "out" | printf "%q"}} // 玩出花的管道的链式调用 {{"output" | printf "%s" | printf "%q"}} // 管道的链式调用 {{with "output"}}{{printf "%q" .}}{{end}} // 使用dot的with action {{with $x := "output" | printf "%q"}}{{$x}}{{end}} //创建并使用变量的with action {{with $x := "output"}}{{printf "%q" $x}}{{end}} // 将变量使用在另一个action的with action {{with $x := "output"}}{{$x | printf "%q"}}{{end}} // 以管道形式将变量使用在另一个action的with action
4、模板自定义方法添加
自定义方法添加一定要在ParseFiles解析之前,因为解析的时候同时会校验模板文件里的方法和语法
初始化有多种方法:
1、初始化空模板
如果初始化的是空模板的话,最后在执行的时候必须调用ExecuteTemplate方法,同时指定解析的模板名称(只要模板名称即可)
t := template.New("") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles("view/demo.html") err = t.ExecuteTemplate(w, "demo.html", p)
2、初始化解析模板
如果初始化的是解析模板的话,最后在执行的时候可以调用ExecuteTemplate方法,同时指定解析的模板名称(只要模板名称即可)或Execute方法都行
t := template.New("demo.html") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles("view/demo.html") //err = t.ExecuteTemplate(w, "demo.html", p) // 或 err = t.Execute(w, p)
3、嵌套模板自定义方法
一般情况页面都指多模板嵌套显示:所以这种情况下New和ExecuteTemplate里面的模板名称需要是最父级的模板文件,如下的layout.html
t := template.New("layout.html") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles([]string{ "view/layout.html", "view/header.html", "view/demo.html", "view/footer.html", }...) //err = t.ExecuteTemplate(w, "layout.html", p) // 或 err = t.Execute(w, p)
到此这篇关于详解golang中模板的常用语法的文章就介绍到这了,更多相关golang模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!