入门示例
package main | |
import ( | |
"html/template" | |
"log" | |
"net/http" | |
) | |
func main() { | |
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { | |
t, err := template.ParseFiles("tpl/hello.html") //创建一个模板 | |
if err != nil { | |
panic(err.Error()) | |
} | |
user := map[string]string{ | |
"name": "li", | |
} | |
e := t.Execute(w, user) //执行模板,并通过w输出 | |
if e != nil { | |
panic(e.Error()) | |
} | |
}) | |
log.Fatal(http.ListenAndServe(":9777", nil)) | |
} |
hello.html文件
<html lang="en"> | |
<body> | |
{{.}} | |
<h1>HELLO WORLD</h1> | |
</body> | |
</html> |
前面的html文件中使用了一个template的语法{{.}},这部分是需要通过go的template引擎进行解析,然后替换成对应的内容。
在go程序中,handler函数中使用template.ParseFiles(“tpl/hello.html”),它会自动创建一个模板(关联到变量t上),并解析一个或多个文本文件(不仅仅是html文件),解析之后就可以使用Execute(w,data)去执行解析后的模板对象,执行过程是合并、替换的过程。
template 数据绑定
template 动态数据如何表示? 例如上面的{{.}}中的.会替换成当前对象”user”,并和其它纯字符串内容进行合并,最后写入w中。
template 数据展示常用方法
# 渲染数据可以是go的所有类型 | |
# 渲染数据本身 | |
{{ . }} | |
# 自定义变量 | |
{{ $var = . }} | |
# struct | |
# 大写字母开头属性Field | |
{{ .Field }} | |
# 嵌套struct时的 属性Field1 | |
{{ .Field.Field1 }} | |
# 变量为struct时的 属性Field | |
{{ $x = . }} | |
{{ $x.Field }} | |
# 方法 | |
{{ .Method }} | |
# 嵌套struct的方法 | |
{{ .Field.Method }} | |
# 嵌套struct的map中struct的方法 | |
{{ .Field.Key.Method }} | |
# map | |
# 键名 | |
{{ .key }} | |
# struct中map | |
{{ .Field.key }} | |
# 变量的struct中map | |
{{ $x = . }} | |
{{ $x.Field.key }} | |
# 函数 | |
{{ funName . }} | |
# 注释 | |
{{/* comment */}} | |
{{- /* comment */ -}} | |
# 默认输出,效果 fmt.Print(pipeline) | |
{{ pipeline }} | |
# 流程控制 | |
{{if pipeline}} T1 {{end}} | |
{{if pipeline}} T1 {{else}} T0 {{end}} | |
{{if pipeline}} T1 {{else if pipeline}} T0 {{end}} | |
{{with pipeline}} T1 {{end}} | |
{{with pipeline}} T1 {{else}} T0 {{end}} | |
# 循环 | |
# array, slice, map, or channel | |
{{range pipeline}} T1 {{end}} | |
{{range pipeline}} T1 {{else}} T0 {{end}} | |
# 嵌套关联 | |
{{template "name"}} | |
# 当前模板引入其他模板,并且传递数据 | |
{{template "name" pipeline}} | |
# 等价声明和执行 {{define "name"}} T1 { {end}} & {{template "name" pipeline}} | |
{{block "name" pipeline}} T1 {{end}} |