goweb编程实战(10)----模板引擎库text/template包的使用(代码片段)

李元静 李元静     2022-11-02     546

关键词:

目录

前言

在Go语言中,模板引擎库text/template包主要用于处理任意格式的文本内容,同时还提供了html/template包,用于生成可对抗代码注入的安全HTML文档。

模板可以被理解为实现定义好的HTML文档。模板渲染可以被简单理解为文本替换操作。使用相应的数据去替换HTML文档中事先准备好的标记内容。

根据MVC模型,模板的诞生是为了将显示与数据分离,即前后端分离。

模板引擎

模板引擎库text/template包的使用方式,可以归纳为4点:

  • 模板文件的后缀名通常是.tmpl和.tpl,必须使用UTF-8编码。
  • 模板文件中使用和来包裹和标识需要传入的数据。
  • 传给模板的数据可以通过点好(.)来访问。如果是复合类型的数据,则可以通过.FieldName来访问它的字段。
  • 除了与包裹的内容外,其他内容均不做修改,原样输出。

定义模板文件

定义模板文件是指,按照相应的语法规则去定义模板文件。

解析模板文件

html/template包提供了以下方法来解析模板文件,获得模板对象。

  1. 可以通过New()函数模板来创建模板对象,并为其添加一个模板名称。
  2. 可以使用Parse()方法来创建模板对象,并完成解析模板内容。
  3. 如果要解析模板文件,则使用ParseFiles()函数,该函数返回模板对象。
  4. 如果需要批量解析文件,则使用ParseGlob()函数。该函数可以进行正则匹配。
func New(name string) *Template
func (t *Template) Parse(src string)(*Template,error)
func ParseFiles(filename ...string)(*Template,error)
func ParseGlob(pattern string)(*Template,error)

渲染模板

html/template包提供了Execute()和ExecuteTemplate()方法来渲染模板。其具体定义如下:

func (t *Template) Execute(wr io.Writer,data interface()) error
func (t *Template) ExecuteTemplate(wr io.Writer,name string,data interface)error

需要注意的是,使用ParseFiles()函数可以一次加载多个模板,此时不可以使用Execute()来执行数据融合,可以通过ExecuteTemplate()函数指定模板名称来执行数据融合。

实战使用模板

接下来,我们来通过代码实战,学习模板的应用。

创建.tmpl文件

首先,我们需要创建一个template_example.tmpl的模板文件,如果你学习过其他的Web开发,可以将其理解为html代码,示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>模板的第一次实战</title>
</head>
<body>
<p>欢迎小伙伴跟随博主学习 . 开发</p>
</body>
</html>

创建文件用于解析与渲染模板

接着,我们需要创建文件用于解析与渲染模板,示例如下(.go文件):

package main

import (
	"fmt"
	"html/template"
	"net/http"
)

func helloHandleFunc(w http.ResponseWriter, r *http.Request) 
	t, err := template.ParseFiles("./template_example.tmpl")
	if err != nil 
		fmt.Println("template parsefile failed,error:", err)
		return
	
	yyds := "Go Web"
	t.Execute(w, yyds)


func main() 
	http.HandleFunc("/", helloHandleFunc)
	http.ListenAndServe(":80", nil)

运行之后,你会发现浏览器输出了如下字符串代码:

goweb(下)之模板引擎会话控制客户端(代码片段)

GoWeb(下)之模板引擎、会话控制、客户端一、模板引擎1.1HelloWord1.2解析模板1.3执行模板1.4引入静态资源1.5动作1.5.1.1.5.2条件动作1.5.3迭代动作1.5.4设置动作1.5.5定义、嵌套模板1.5.6块动作1.6修改默认的标识符二、会话控制2.... 查看详情

goweb(下)之模板引擎会话控制客户端(代码片段)

GoWeb(下)之模板引擎、会话控制、客户端一、模板引擎1.1HelloWord1.2解析模板1.3执行模板1.4引入静态资源1.5动作1.5.1.1.5.2条件动作1.5.3迭代动作1.5.4设置动作1.5.5定义、嵌套模板1.5.6块动作1.6修改默认的标识符二、会话控制2.... 查看详情

goweb编程实战----函数(代码片段)

目录前言声明与使用函数返回多个值return可以为空函数参数参数值传递引用传递可选函数匿名函数匿名函数的定义匿名函数的调用回调函数defer延迟语句defer与return的执行顺序defer常用场景前言本篇博文主要介绍Go语言的函数定义... 查看详情

goweb编程实战----函数(代码片段)

目录前言声明与使用函数返回多个值return可以为空函数参数参数值传递引用传递可选函数匿名函数匿名函数的定义匿名函数的调用回调函数defer延迟语句defer与return的执行顺序defer常用场景前言本篇博文主要介绍Go语言的函数定义... 查看详情

goweb编程实战----面向对象编程(代码片段)

...有类的概念,但这并不意味着Go语言不支持面向对象编程,毕竟面向对象只是一种编程思想。封装属性其实,学习过C语言都应该清楚,结构体是一个类类的结构,也就是说结构体是类的一种简化形式。 查看详情

goweb编程实战----面向对象编程(代码片段)

...有类的概念,但这并不意味着Go语言不支持面向对象编程,毕竟面向对象只是一种编程思想。封装属性其实,学习过C语言都应该清楚,结构体是一个类类的结构,也就是说结构体是类的一种简化形式。 查看详情

goweb编程实战----数据类型(代码片段)

...类型、切片类型、Map类型以及结构体类型。布尔型与其他编程语言一样,Go语言的布尔型只可以是tr 查看详情

goweb编程实战----反射(代码片段)

目录反射反射的3大原则“接口类型变量”转换为“反射类型对象”“反射类型对象”转换为“接口类型变量”“反射类型对象”修改(值必“可写的”)反射与其他语言一样,Go语言的反射同样是指,计算机程序... 查看详情

goweb编程实战----反射(代码片段)

目录反射反射的3大原则“接口类型变量”转换为“反射类型对象”“反射类型对象”转换为“接口类型变量”“反射类型对象”修改(值必“可写的”)反射与其他语言一样,Go语言的反射同样是指,计算机程序... 查看详情

goweb编程实战----流程控制语句(代码片段)

目录流程控制语句if-else语句for循环语句用for循环实现do-while用for循环实现whilebreak指定跳出循环continue语句for-range循环遍历数组遍历字符串遍历map遍历通道(channel)switch-case语句一个分支多个值分支表达式goto语句流程控制... 查看详情

goweb编程实战----流程控制语句(代码片段)

目录流程控制语句if-else语句for循环语句用for循环实现do-while用for循环实现whilebreak指定跳出循环continue语句for-range循环遍历数组遍历字符串遍历map遍历通道(channel)switch-case语句一个分支多个值分支表达式goto语句流程控制... 查看详情

goweb编程实战----并发goroutine(代码片段)

目录什么是goroutine?使用方式什么是goroutine?在Go语言中,每一个并发执行的活动被称为goroutine。使用go关键字可以创建goroutine,其完整定义如下:gofunc_name()其中,go是关键字,需要放在一个需要调用的函数之前&#... 查看详情

goweb编程实战----并发goroutine(代码片段)

目录什么是goroutine?使用方式什么是goroutine?在Go语言中,每一个并发执行的活动被称为goroutine。使用go关键字可以创建goroutine,其完整定义如下:gofunc_name()其中,go是关键字,需要放在一个需要调用的函数之前&#... 查看详情

goweb编程实战----并发goroutine(代码片段)

目录什么是goroutine?使用方式什么是goroutine?在Go语言中,每一个并发执行的活动被称为goroutine。使用go关键字可以创建goroutine,其完整定义如下:gofunc_name()其中,go是关键字,需要放在一个需要调用的函数之前&#... 查看详情

goweb编程实战----创建客户端(代码片段)

目录创建一个客户端Get()请求Post()请求请求头设置创建一个客户端在Go语言的net/http包中,还提供了一个被称为Client的结构体。该结构体提供了Get()、Post()两个请求函数。下面,我们来分别使用代码实现这些请求。Get()请求... 查看详情

goweb编程实战----go语言的基础语法(代码片段)

目录前言HelloWorld包的声明与导入运行程序方式基础语法注释标识符变量常量运算符前言很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发... 查看详情

goweb编程实战----go语言的基础语法(代码片段)

目录前言HelloWorld包的声明与导入运行程序方式基础语法注释标识符变量常量运算符前言很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发... 查看详情

编程实践goweb框架&中间件&工具库等

目录编译器数据结构JSON格式依赖注入IOCGoWeb框架中间件ORM数据库 查看详情