模板引擎

Go 为我们提供了 text/template 库和 html/template 库这两个模板引擎,模板引

擎通过将数据和模板组合在一起生成最终的 HTML,而处理器负责调用模板引擎并将引

擎生成的 HTMl 返回给客户端。

Go 的模板都是文本文档(其中 Web 应用的模板通常都是 HTML),它们都嵌入了

一些称为动作的指令。从模板引擎的角度来说,模板就是嵌入了动作的文本(这些文本

通常包含在模板文件里面),而模板引擎则通过分析并执行这些文本来生成出另外一些

文本。

HelloWorld

使用 Go 的 Web 模板引擎需要以下两个步骤:

(1) 对文本格式的模板源进行语法分析,创建一个经过语法分析的模板结构,其中

模板源既可以是一个字符串,也可以是模板文件中包含的内容。

(2 )执行经过语法分析的模板,将 ResponseWriter 和模板所需的动态数据传递给模

板引擎,被调用的模板引擎会把经过语法分析的模板和传入的数据结合起来,生成出最

终的 HTML,并将这些 HTML 传递给 ResponseWriter。

下面就让我们写一个简单的 HelloWorld

  1. 创建模板文件 hello.html
<html>
<head>
<title>模板文件</title>
<meta charset="utf-8" />
</head>
<body>
//嵌入动作 {{.}}
</body>
</html>
  1. 在处理器中触发模板引擎
func handler(w http.ResponseWriter, r *http.Request) {
//解析模板文件
t, _ := template.ParseFiles("hello.html")
//执行模板
t.Execute(w, "Hello World!")
}
  1. 浏览器中的结果

    Hello World!

解析模板

  1. ParseFiles 函数

当我们调用 ParseFiles 函数解析模板文件时,Go 会创建一个新的模板,

并将给定的模板文件的名字作为新模板的名字,如果该函数中传入了多个

文件名,那么也只会返回一个模板,而且以第一个文件的文件名作为模板

的名字,至于其他文件对应的模板则会被放到一个 map 中。让我们再来

看一下 HelloWorld 中的代码:

t, _ := template.ParseFiles("hello.html")

以上代码相当于调用 New 函数创建一个新模板,然后再调用 template 的

ParseFiles 方法:

t := template.New("hello.html")
t, _ = t.ParseFiles("hello.html")

我们在解析模板时都没有对错误进行处理,Go 提供了一个 Must 函数专

门用来处理这个错误。Must 函数可以包裹起一个函数,被包裹的函数会

返回一个指向模板的指针和一个错误,如果错误不是 nil,那么 Must 函数

将产生一个 panic。

实验 Must 函数之后的代码

t := template.Must(template.ParseFiles("hello.html"))

  1. ParseGlob 函数

通过该函数可以通过指定一个规则一次性传入多个模板文件,如:

t, _ := template.ParseGlob("*.html")

执行模板

  1. 通过 Execute 方法

如果只有一个模板文件,调用这个方法总是可行的;但是如果有多个模板

文件,调用这个方法只能得到第一个模板

  1. 通过 ExecuteTemplate 方法

例如:

t, _ := template.ParseFiles("hello.html", "hello2.html")

变量 t 就是一个包含了两个模板的模板集合,第一个模板的名字是

hello.html,第二个模板的名字是 hello2.html,如果直接调用 Execute 方法,

则只有模板 hello.html 会被执行,如何想要执行模板 hello2.html,则需要

调用 ExecuteTemplate 方法

t.ExecuteTemplate(w, "hello2.html", "我要在 hello2.html 中显示")

goweb-模板引擎的更多相关文章

  1. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  2. Handlebars 模板引擎之前后端用法

    前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...

  3. 推荐13款javascript模板引擎

    javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...

  4. JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  5. DotLiquid模板引擎简介

    DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...

  6. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  7. 浅谈 Web 中前后端模板引擎的使用

    前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...

  8. JavaScript模板引擎artTemplate.js——结语

    再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...

  9. Javascript最简单的模板引擎

    非常简单,性能估计一般,方法最原始. //第一代模板引擎 //只支持{{key}}的替换,不支持语句 //支持Object和Array对象 function template_setdata(temp ...

  10. Javascript模板引擎插件收集

    为什么要用JS的模板引擎,打个比方,如果你要通过接口绑定数据,最终要加进去DOM中,我们普遍的做法就是不断的+,最终append进去,但是这样的做法就是后续人员压根就没法维护.所以这时模板引擎出来了. ...

随机推荐

  1. Redis 详解 (一) redis的简介和安装

    目录 1.Redis 的简介 2.Redis 下载 3.安装环境 4.编译安装 5.启动Redis 6.关闭Redis 7.注意事项 工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的 ...

  2. while循环和do-while循环语句

    while 语句 条件表达式的结果是一个 boolean 值,如果为true,则执行循环体:如果为 false,循环就会结束. while 循环体是一个代码块,所以 while 循环是可以嵌套其他的语 ...

  3. UVA 10564 计数DP

    也是经典的计数DP题,想练练手,故意不写记忆化搜索,改成递推,还是成功了嘞...不过很遗憾一开始WA了,原来是因为判断结束条件写个 n或s为0,应该要一起为0的,搞的我以为自己递推写挫了,又改了一下, ...

  4. 腾讯云服务器上搭建 2.176.3-1.1 版本的Jenkins,jdk 11

    [root@VM_0_12_centos fonts]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@VM_0 ...

  5. SpringMVC中 controller方法返回值

    1)ModelAndView @RequestMapping(value="/itemEdit") public ModelAndView itemEdit(){ //创建模型视图 ...

  6. spring学习第7天(PCD以及切点表达式)

    1.PCD(PointCutDesigner) spring的aop只针对方法进行aop代理,而apectj联盟的aop比之更加强大,还可以针对字段等进行切面编程 1.1:execution,用的最多 ...

  7. FTP故障排除

    1,ping 检查 IP是否通 禁PING可以使用TCPING 2,服务器端被动模式设置,可设置固定端口号,保证防火墙上该端口畅通 浏览器默认是主动模式 3,使用FLASHFXP软件可以监测到数据端口 ...

  8. caffe 官方demo python api

    Jupyter https://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb 涉及: - ...

  9. BGP的地址聚合

    aggregate-address ip make——多用于地址聚合命令. 但,因此很容易产生路由环路. 所以多加一个参数. as-set as-set,可以是BGP聚合路不丢失原来的AS-Path属 ...

  10. Java生鲜电商平台-如何使用微服务来架构生鲜电商B2B2C平台?

    Java生鲜电商平台-如何使用微服务来架构生鲜电商B2B2C平台? 说明:随着互联网的日益普及,人们通过手机下单买菜的人越来越多,生鲜这个行业有两个显著的特点,一个是刚需.(你每天都要吃饭,都要吃菜) ...