一、template模板案例
1、解析字符串
package main
import (
"log"
"os"
"text/template"
)
func main() {
//Default返回一个默认的路由引擎
txt := `{{ . }}`
data := "james"
//创建模板
tpl := template.New("txtTemplate")
tpl, err := tpl.Parse(txt)
if err != nil {
log.Fatal(err)
}
//执行输出到控制台
err = tpl.Execute(os.Stdout, data)
//fmt.Println(err)
}
2、携带if else
func main() {
//Default返回一个默认的路由引擎
txt := `{{ if . }}
true
{{ else }}
无内容
{{end}}
`
data := true
//创建模板
tpl := template.New("txtTemplate")
tpl, err := tpl.Parse(txt)
if err != nil {
log.Fatal(err)
}
//执行输出到控制台
err = tpl.Execute(os.Stdout, data)
//fmt.Println(err)
}
//输出true
3、index索引
func main() {
//Default返回一个默认的路由引擎
txt := `{{ index . 2}}`
data := []int{2, 2, 3, 4}
//创建模板
tpl := template.New("txtTemplate")
tpl, err := tpl.Parse(txt)
if err != nil {
log.Fatal(err)
}
//执行输出到控制台
err = tpl.Execute(os.Stdout, data)
//fmt.Println(err)
}
4、range遍历
package main
import (
"log"
"os"
"text/template"
)
func main() {
//Default返回一个默认的路由引擎
//range 中,表示遍历的每一个元素,输出的是值
txt := `{{ range . }}
{{ . }}
{{ end }}
`
//输出k,v
txt1 :=`{{ range $i,$v := . }}
{{ $i }}: {{ $v }}
{{ end }}
`
data := []int{2, 2, 3, 4}
//创建模板
tpl := template.New("txtTemplate")
tpl, err := tpl.Parse(txt)
if err != nil {
log.Fatal(err)
}
//执行输出到控制台
err = tpl.Execute(os.Stdout, data)
//fmt.Println(err)
}
5、对结构体操作
package main
import (
"log"
"os"
"text/template"
)
type User struct {
ID string
Name string
}
func main() {
//Default返回一个默认的路由引擎
txt := `
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{{ range . }}
<tr>
<td>{{ .ID }}</td>
<td>{{ .Name }}</td>
</tr>
</tbody>
</table>
{{ end }}
`
data := []User{{"1", "小明"}, {"2", "小李"}}
//创建模板
tpl := template.New("txtTemplate")
tpl, err := tpl.Parse(txt)
if err != nil {
log.Fatal(err)
}
//执行输出到控制台
err = tpl.Execute(os.Stdout, data)
//fmt.Println(err)
}
二、模板嵌套
package main
import (
"os"
"text/template"
)
type title struct {
Title string
}
func main(){
header :=`{{ define "header"}}<head><meta charset="utf-8"/><title>{{ .Title }}</title></head>{{ end }}`
page1 :=`{{ define "page1" }}<!DOCYPE html>
<html>
{{ template "header" . }}
<body>
this is page1
</body>
</html>
{{ end }}
`
page2 :=`{{ define "page2"}}<!DOCYPE html>
<html>
{{ template "header" . }}
<body>
this is page2
</body>
</html>
{{ end }}
`
var ti1 =title{"定义page1"}
tp1,_ :=template.New("tp1").Parse(header)
tp1,_ = tp1.Parse(page1)
tp1,_ = tp1.Parse(page2)
tp1.ExecuteTemplate(os.Stdout,"page1",ti1)
}
三、分开模板
1、page.html文件
<!DOCYPE html>
<html>
{{ template "header.html" . }}//文件名称进行引用
<body>
this is page2
</body>
</html>
2、header.html文件
<head><meta charset="utf-8"/><title>{{ .Title }}</title></head>
3、go文件
package main
import (
"html/template"
"os"
)
type User struct {
ID string
Name string
}
func main(){
tpl,_ :=template.New("tpl").ParseFiles("tpl/header.html","tpl/page.html")
tpl.ExecuteTemplate(os.Stdout,"page.html", struct { Ttile string }{"模板文件"})
四、go文件内书写html
package main
import (
"fmt"
"net/http"
"text/template"
)
func main() {
http.HandleFunc("/header/", func(w http.ResponseWriter, r *http.Request) {
tpl, err := template.ParseFiles("./HTML/index.html")
if err != nil {
panic(err)
}
err = tpl.ExecuteTemplate(w, "index.html", nil)
if err != nil {
panic(err)
}
fmt.Println("------------------")
})
http.ListenAndServe(":9099", nil)
}