一、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) }