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 数据的方式。
AI 中文社