Go Web 模板简介
Web 模板就是预先设计好的 HTML 页面,它可以被模板引擎反复地使用,来产生 HTML 页面。Go 的标准库提供了 text/template
, html/template
两个模板库。大多数 Go 的 Web 框架都使用这些库作为 默认的模板引擎 。
模板与模板引擎
模板引擎就是通过合并 模板
与 上下文数据
,产生最终的 HTML 。
两种理想的模板引擎
无逻辑模板引擎
- 通过占位符,动态数据被替换到模板中
- 不做任何逻辑处理,只做字符串替换
- 处理完全由 handler 来完成
- 目标是展示层和逻辑的完全分离
逻辑嵌入模板引擎
- 编程语言被嵌入到模板中
- 在运行时由模板引擎来执行,也包含替换功能
- 功能强大
- 逻辑代码遍布 handler 和 模板,难以维护
Go 的模板引擎
主要使用的是 text/template
,HTML 相关的部分使用了 html/template
,是个混合体。模板可以完全无逻辑,但又具有足够的嵌入特性。和大多数模板引擎一样,Go Web 的模板位于无逻辑和嵌入逻辑之间的某个地方。
Go 模板引擎的工作原理
在 Web 应用中,通常是由 handler 来触发模板引擎。客户端发送一个请求给服务器,服务器中的多路复用器指定某个 handler
, handler
处理器调用模板引擎,并将使用的模板(通常是一组模板文件和动态数据)传递给引擎,模板引擎生成 HTML ,并将其写入到 ResponseWriter
, ResponseWriter
再将它加入到 HTTP 响应中,返回给客户端。具体过程可以参考下图:
关于模板
模板必须是可读的文本格式,扩展名任意。对于 Web 应用通常就是 HTML 。text/template
是通用模板引擎, html/template
是 HTML 模板引擎。模板里面会内嵌一些命令,叫做 action , action 位于双层花括号之间:{{ . }}
。它可以命令模板引擎将其替换成一个值。
使用模板引擎
首先定义模板,然后解析模板源(可以是字符串或模板文件),从而创建一个解析好的模板的 struct。执行解析好的模板,并传入 ResponseWriter
和 数据
。这会触发模板引擎组合解析好的模板和数据,来产生最终的 HTML,并将它传递给 ResponseWriter
。下面的例子,首先创建 template.html 文件:
然后写 go 代码:
运行程序并访问 http://localhost:8080/
就能看到显示代码写入的 Model
字样。