Go http模板

模板与渲染

在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。

 

Go语言内置了文本模板引擎text/template和用于HTML文档的html/template。它们的作用机制可以简单归纳如下:

  1. 模板文件通常定义为.tmpl.tpl为后缀(也可以使用其他的后缀),必须使用UTF8编码。
  2. 模板文件中使用{{}}包裹和标识需要传入的数据。
  3. 传给模板这样的数据就可以通过点号(.)来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。
  4. {{}}包裹的内容外,其他内容均不做修改原样输出。

Go语言模板引擎的使用可以分为三部分:定义模板文件、解析模板文件和模板渲染.

定义模板:

其中,定义模板文件时需要我们按照相关语法规则去编写。

解析模板文件:

上面定义好了模板文件之后,可以使用下面的常用方法去解析模板文件,得到模板对象:

func (t *Template) Parse(src string) (*Template, error)
func ParseFiles(filenames ...string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)

  模板渲染:

渲染模板简单来说就是使用数据去填充模板,当然实际上可能会复杂很多。

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

  

使用举例:

模板定义

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <title>这是index页面</title>
</head>
<body>
    <p>{{ .A }}</p>
    <p>{{ .B }}</p>
    <p>{{ .C }}</p>
</body>
</html>

 go 代码实现:

package main

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

func templates(w http.ResponseWriter, r *http.Request){
	//解析模板
	t,_ := template.ParseFiles("templates/index.tmpl")

	data := map[string]interface{}{
		"A":"aaa",
		"B":"bbb",
		"C":"ccc",
	}
	//渲染模板
	t.Execute(w,data)

}

func main() {
	http.HandleFunc("/templates",templates)
	http.ListenAndServe(":9999",nil)

}

  

posted @ 2020-04-09 17:33  醉深梦始  阅读(528)  评论(0)    收藏  举报