golang 模板引擎常用语法

golang 模板常用语法

1、变量赋值

Action里可以初始化一个变量来捕获管道的执行结果。初始化语法如下:
其中$variable是变量的名字。声明变量的action不会产生任何输出。

{{$variable := pipeline}}

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

2、range

循环切片数组等
如果"range" action初始化了1个变量,该变量设置为迭代器的每一个成员元素,如果初始化了逗号分隔的2个变量:
这时, k e y 和 key和 keyval分别设置为数组/切片的索引或者字典的键,以及对应的成员元素。注意这和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)

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

你可能感兴趣的:(golang,golang,python,前端,开发语言,go配置文件,个人开发)