Go模板引擎 教程
Go 语言内置了 text/template 和 html/template 两个模板库,专门用于处理网页 html 模板。
其中,html/template 是在 text/template 模板库的基础上增加了对 html 输出的安全处理,主要目的是为了防止被攻击。
1. Go 模版引擎使用流程
- 编写模版代码;
- 导入包;
- 加载模版代码;
- 根据模版参数渲染模版。
2. Go 模版引擎使用范例
1)编写模版代码
在项目下先创建 views 目录,用于存放模板文件。比如:将下面模版代码保存至 views/demo.tpl 文件中。
{{define "demo"}} 这是测试内容:{{.}} {{end}}
代码中 define "模板名" 用于定义子模板,后面渲染模板会用到这个名字。
2)导入包
import "text/template"
本文主要以 text/template 为例,如果要使用 html/template 直接替换包名就行,他们接口一样。
3)加载模版代码
// 加载模版代码,并且创建 template 对象 t // template.ParseGlob 函数加载 views 目录下的所有 tpl 为后缀的模版文件 // template.Must 函数主要用于检测加载的模版有没有错误,有错误输出 panic 错误,并且结束程序。 t := template.Must(template.ParseGlob("./views/*.tpl"))
4)根据模版参数渲染模版
定义模版参数:
Go 模板引擎默认只能传入一个模版参数,如果想传入多个模版参数,可以使用 map 或者 struct 类型。
// 比如定义了一个字符串参数,实际上模版可以是任意类型数据 content := "Hello World, 编程教程"
使用模板参数渲染模板:
err := t.ExecuteTemplate(os.Stdout, "demo", content) if err != nil { log.Println("executing template:", err) }
5)整体代码
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) } }
运行输出结果:
这是测试内容:Hello World, 编程教程
根据不同的模版参数,渲染模版输出不同的页面内容,就是模版引擎的主要工作,目的是简化 html 模版输出工作。
3. Gin框架 使用 Go模版引擎
各种 Go 路由框架,比如 Gin,Beego都提供了自己的模板引擎,都是对 Go 模版引擎的进一步封装,语法相同,无需另行学习。
比如在 Gin框架 中使用模板:
1)编写模版代码
将下面模版代码保存至 views/demo.tpl 文件中, 文件后缀名随意。
{{define "demo"}} 这是测试内容:{{.content}} {{end}}
2)在 Gin框架 代码中调用模板
func (s *Category) Get(c *gin.Context) { content := "Hello World, 编程教程" c.HTML(http.StatusOK, "views/demo.tpl", gin.H{ "content": content, }) }
下一章:Go模板引擎 基本语法
Go模板引擎 template基本语法:Go模板引擎的模板表达式都包括在{{ 和 }} 之间。go template 语法和使用:Go模板引擎的语法格式:{{ 模板表达式 }} 。在模版文件中通过 点( . ) 引用模版参数。因为在渲染模版的时候只能传入一个参数,所以 点( . ) 正好可以代表模版参数的引用。模版参数支持数字、布尔值、字符串、map、struct、数组类型。