一架梯子,一头程序猿,仰望星空!

Golang模板引擎快速入门教程


Go语言内置了 text/template 和 html/template两个模板库,专门用于处理网页html模板。
html/template 是在 text/template 模板库的基础上增加了对html输出的安全处理,主要目的是为了防止被攻击。

下面通过一个例子介绍template的用法。

模版引擎使用流程:

  1. 编写模版代码
  2. 导入包
  3. 加载模版代码
  4. 根据模版参数渲染模版

1.快速入门例子

1.1.编写模版代码

将下面模版代码保存至views/demo.tpl文件中, 文件后缀名随意。

{{define "demo"}}
昵称: {{.Name}},
{{- if .IsWin}}
恭喜,大吉大利,今晚吃鸡!
{{- else}}
遗憾,鸡被吃光了!
{{- end}}
{{- end}}

define "模板名" 用于定义子模板,后面渲染模板会用到这个名字。

提示: 大家可以先跳过模版语法的细节,先了解大概怎么用,后面的章节会详细介绍模版语法。

1.2.导入包

import "text/template"

提示: 本文主要以text/template为例,如果要使用html/template直接替换包名就行,他们接口一样。

1.3.加载模版代码

// 加载模版代码,并且创建template对象t
// template.ParseGlob 函数加载views目录下的所有tpl为后缀的模版文件
// template.Must函数主要用于检测加载的模版有没有错误,有错误输出panic错误,并且结束程序。
t := template.Must(template.ParseGlob("./views/*.tpl"))

1.4.根据模版参数渲染模版

定义模版参数:

//这里定义一个struct类型的模版参数,实际上模版可以是任意类型数据
type GameStatus struct {
    Name string
    IsWin bool
}

提示: 因为只能传入一个模版参数,如果想传入多个模版参数,可以使用map或者struct类型。

初始化模板参数, 这里初始化一个参数数组,下面用于循环渲染模板。

var userStatus = []GameStatus{
    {"大春", true},
    {"NiuBee", false},
    {"球球", true},
}

下面是根据userStatus 数组循环渲染模板

for _, u := range userStatus {
    //根据参数u, 渲染命名为demo的模板,并且将渲染结果打印到标准输出
    err := t.ExecuteTemplate(os.Stdout, "demo", u)
    if err != nil {
        log.Println("executing template:", err)
    }
}

输出结果:

昵称: 大春,
恭喜,大吉大利,今晚吃鸡!
昵称: NiuBee,
遗憾,鸡被吃光了!
昵称: 球球,
恭喜,大吉大利,今晚吃鸡!

说明:根据不同的模版参数,渲染模版输出不同的页面内容,就是模版引擎的主要工作,目的是简化html模版输出工作。