1 模板界定符
{{ }}
是默认的模板界定符。用于在 HTML 模板文件中界定模板语法。例如:
Hello, {{ .User }}
<br>
你熟悉的技术:
<ul>
{{ range .List }}
<li>{{.}}</li>
{{end}}
</ul>
func (t *Template) Delims(left, right string) *Template
2 数据
.rangerange
template.HTML
t.Execute(w, `<script>alert("Hack")</script>`)
// 解析结果: <script>alert("Hack")</script>
t.Execute(w, template.HTML(`<script>alert("Hack")</script>`))
// 解析结果: <script>alert("Hack")</script>
甚至在不同的 HTML 语法上下文中,会有不同的编码方式,例如:
.Hank's 博客
a href="{{.}}" 中,会进行 URL 编码,结果为:Hank%27s%20%e5%8d%9a%e5%ae%a2
a title="{{.}}" 中,会进行 ASCII 实体编码,结果为:Hank's 博客
3 调用函数
{{FuncName1 "参数值1" "参数值2"}}
函数支持模板函数,和全局函数。预定义的全局函数为:
and x yif x then y else xor x yif x then x else yindex x 1 2 3x[1][2][3]
4 管道
可以在变量后使用 | (管道符),将其值作为参数传递给函数,并得到函数的返回值。管道可以连续使用,演示为:
// . 为 `Hank's 博客`
{{.|urlquery}}
// Hank%27s+%E5%8D%9A%E5%AE%A2
5 条件分支
{{if pipeline}} T1 {{ else if pipeline}} T2 {{else}} T3 {{end}}
若 pipeline 的值不为 empty,条件匹配,执行相应分支。
empty 空值为:false、0、任意nil指针或者nil接口,任意长度为0的数组、切片、字典。
6 循环遍历
{{range pipeline}} T1 {{else}} T0 {{end}}
或
{{range $index, $element := pipeline}} T1 {{end}}
遍历数组、切片、字典或者通道的每一个成员元素并执行 T1。
若 pipeline 为空,执行 T0。else 分支可以省略。
empty 空值为:false、0、任意nil指针或者nil接口,任意长度为0的数组、切片、字典。
若需要同时获取下标和值,需要使用变量赋值语法。
7 解析子模板
{{template "name" pipeline}}
解析名为 name 的模板,提供给模板的参数为 pipeline。
8 定义模板变量
{{$variable := pipeline}}
9 注释
{{/* a comment */}}
完!
原文出自:小韩说课
微信关注:小韩说课