Go模板引擎 template基本语法
Go模板引擎的模板表达式都包括在 {{ 和 }} 之间。
1. go template 语法和使用
Go模板引擎的语法格式:{{ 模板表达式 }} 。
在模版文件中通过 点( . ) 引用模版参数。因为在渲染模版的时候只能传入一个参数,所以 点( . ) 正好可以代表模版参数的引用。
模版参数支持数字、布尔值、字符串、map、struct、数组类型。
2. int/bool/string 类型参数
模版参数为 int/bool/string 类型,可以直接用点( . ) 引用即可。
{{define "demo"}} 这是测试内容:{{.}} {{end}}
然后通过传入参数,对模板进行渲染:
// 渲染 demo 模版,传入字符串参数 "欢迎访问编程教程" t.ExecuteTemplate(os.Stdout, "demo", "欢迎访问编程教程")
模版中 {{.}} 被 “欢迎访问编程教程” 代替,输出:
欢迎访问编程教程
整体代码如下:
package main import ( "log" "os" "text/template" ) func main() { t := template.Must(template.ParseGlob("./views/*.tpl")) content := "Hello World, 编程教程" err := t.ExecuteTemplate(os.Stdout, "demo", content) if err != nil { log.Println("executing template:", err) } }
3. map/struct 类型参数
如果要传入多个模版参数,一般都使用 map 或者 struct 类型。
引用语法格式:
{{.字段名}}
嵌套的 struct 或者 map 类型引用语法格式:
{{.字段名1.字段名2}}
使用 点( . ) 连接多个字段名,就可以访问多层嵌套的 struct/map 类型数据。
使用 map/struct 类型参数的范例:
// 定义struct模版参数 type User struct { Name string } type Order struct { Id int Title string Customer User //嵌套字段 } // 初始化模版参数 food := Order{ Id: 10, Title: "柠檬", Customer: User{ Name: "李大春" } } // 渲染demo模版, 模版参数为food t.ExecuteTemplate(os.Stdout, "demo", food)
模版文件代码:
商品名: {{.Title}} 用户名: {{.Customer.Name}}
运行输出结果:
商品名: 柠檬 用户名: 李大春
如果模板参数传入数组,则需要循环语句处理输出,后面的章节会介绍range循环语句用法。
4. 模版变量
在模版中也可以自定义变量, 类似 golang 使用 := 符号定义变量,语法如下:
$变量名 := 数据
变量名需要以 $ 美元符号开头。
模版变量范例:
// 定义变量 $title := "标题" // 为变量赋值, 第二次为变量赋值,不需要冒号: $title = "新标题" // 引用变量 {{$title}}
5. 注释
Go 模板引擎的注释格式: {{/* 注释语法 */}}。
6. 删除空格处理
有时候我们输出表达式结果的时候,在表达式结果左右两边都会携带一些空格。
下面是删除表达式结果左右两边空格的语法:
- 在左边增加减号和空格,表示删除左边空格: {{- 模板表达式 }}
- 在右边增加空格和减号,表示删除右边空格: {{ 模板表达式 -}}
- 删除表达式左右两边空格的写法: {{- 模板表达式 -}}
删除空格处理范例:
"{{23 -}} < {{- 45}}"
输出:
"23<45"
23和45之间的空格都被删除了
下一章:Go模板引擎 流程控制语句
Go模板引擎的流程控制语句主要是 if/range/with 三种语句。if 语句:语法格式1:表达式为真,则执输出T1,{{if 表达式}} T1 {{end}}。range 循环语句:{{range 数组引用}} {{.}} {{end}}。with 语句:with 语句主要用于 struct 类型数据的访问,就是一种快速访问 struct 数据的方式。