[笔记] Golang Template

1.header.tmpl

1 {{define "header"}}
2 <html>
3 <head>
4 <title>演示信息</title>
5 </head>
6 <body>
7 {{end}}

2. content.tmpl

1 {{define "content"}}
2 {{template "header"}}
3 <h1>演示嵌套</h1>
4 <ul>
5 <li>嵌套使用 define 定义子模板</li>
6 <li>调用使用 template</li>
7 </ul>
8 {{template "footer"}}
9 {{end}}

3. footer.tmpl

1 {{define "footer"}}
2 </body>
3 </html>
4 {{end}}

4. main.go

 1 package main
 2
 3 import (
 4     "fmt"
 5     "html/template"
 6     "os"
 7     "strings"
 8 )
 9
10 type Person struct {
11     UserName string
12     Emails   []string
13     Friends  []*Friend
14 }
15
16 type Friend struct {
17     Fname string
18 }
19
20 func EmailDealWith(args ...interface{}) string {
21     ok := false
22     var s string
23     if len(args) == 1 {
24         s, ok = args[0].(string)
25     }
26     if !ok {
27         s = fmt.Sprint(args)
28     }
29     substrs := strings.Split(s, "@")
30     if len(substrs) != 2 {
31         return s
32     }
33     return (substrs[0] + " at" + substrs[1])
34 }
35
36 func main() {
37     demo1()
38     demo2()
39     demo3()
40     demo4()
41 }
42
43 func demo1() {
44     t := template.New("fieldname example")
45     t, _ = t.Parse("hello {{.UserName}}!")
46     p := Person{UserName: "zhangsan"}
47     t.Execute(os.Stdout, p)
48 }
49
50 func demo2() {
51     f1 := Friend{Fname: "minux.ma"}
52     f2 := Friend{Fname: "xushiwei"}
53     t := template.New("fieldname example")
54     t = t.Funcs(template.FuncMap{"emailDeal": EmailDealWith}) // 模版函数的使用方式
55     t, _ = t.Parse(`
56     hello {{.UserName}}!
57     {{range .Emails}}
58         an email {{.|emailDeal}}
59     {{end}}
60     {{with .Friends}}
61     {{range .}}
62         my friend name is {{.Fname}}
63     {{end}}
64     {{end}} `)
65     p := Person{UserName: "Astaxie",
66         Emails:  []string{"[email protected]", "[email protected]"},
67         Friends: []*Friend{&f1, &f2}}
68     t.Execute(os.Stdout, p)
69 }
70
71 func demo3() {
72     tEmpty := template.New("template test")
73     // Must 它的作用是检测模板是否正确,例如大括号是否匹配,注释是否正确的关闭,变量是否正确的书写
74     tEmpty = template.Must(tEmpty.Parse("空 pipeline if demo:{{if ``}}不回输出.{{end}}\n"))
75     tEmpty.Execute(os.Stdout, nil)
76
77     tWithValue := template.New("template test")
78     tWithValue = template.Must(tWithValue.Parse("不为空的 pipeline if demo: {{if `anything`}} 我有内容,我会输出. {{end}}\n"))
79     tWithValue.Execute(os.Stdout, nil)
80
81     tIfElse := template.New("template test")
82     tIfElse = template.Must(tIfElse.Parse("if-else demo:{{if `anything`}} if 部分 {{else}} else 部分.{{end}}\n"))
83     tIfElse.Execute(os.Stdout, nil)
84 }
85
86 func demo4() {
87     s1, _ := template.ParseFiles("header.tmpl", "content.tmpl", "footer.tmpl")
88     s1.ExecuteTemplate(os.Stdout, "header", nil)
89     fmt.Println()
90     s1.ExecuteTemplate(os.Stdout, "content", nil)
91     fmt.Println()
92     s1.ExecuteTemplate(os.Stdout, "footer", nil)
93     fmt.Println()
94     s1.Execute(os.Stdout, nil)
95 }
时间: 2024-10-21 00:08:11

[笔记] Golang Template的相关文章

Golang template和junit xml report转html工具

最近刚好有个task是要用Golang把Junit的XML格式report转换成HTML格式,便学习了Golang的template包. 基于template做的那个tool transforming Junit XML report to HTML. Golang提供了对模板的支持(按照文档的说法,是数据驱动模板,data-driven template),分别在"text/template"和"html/template"两个包下.这两个包在api级别是一致的,

Golang Template source code analysis(Parse)

This blog was written at go 1.3.1 version. We know that we use template thought by followed way: func main() { name := "waynehu" tmpl := template.New("test") tmpl, err := tmpl.Parse("hello {{.}}") if err != nil { panic(err) }

google closure 笔记-SOY template

一 使用js模板 closure template 目前支持Java和js.但是模板语法的设计不依赖于任何现成的语言,所以理论上可以支持任何语言,只是暂时只有java编译器. 使用js模板:编写模板文件 .soy文件,然后用一个java编写的编译器将其编译为js文件,这个编译好的js文件会提供一个函数来输出模板内容, 只需要引入这个js文件然后在js中调用这个函数就可以得到模板的内容(内容是一个字符串). 1, 下载工具包 http://closure-templates.googlecode.

[笔记]python template 模板

1.什么是template template是python中的string库的一部分 使用template可以不编辑应用就可以改变其中的数据 模板还可以被他的子类修改 2. template如何工作的 template是含有占位符的字符串 用字典将值映射到模板中 占位符后面跟着的变量名要符合python语法中的变量名规则 Template("$name is friends with $friend") 3.举例 from string import Template def main

[笔记] Golang File

1 package main 2 3 import ( 4 "fmt" 5 "os" 6 ) 7 8 func main() { 9 demo1() 10 demo2() 11 demo3() 12 demo4() 13 } 14 15 func demo1() { 16 os.Mkdir("astaxie", 0777) 17 os.MkdirAll("astaxie/test1/test2", 0777) 18 err :

[笔记] Golang Socket

1. Socket 简介 常用的 Socket 类型有两种:流式 Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM). 流式是一种面向连接的 Socket,针对于面向连接的 TCP 服务应用: 数据报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应用 2. 网络中的进程之间如何通过 Socket 通信呢? 网络层的“ip 地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程).这样利用三元组(i

[笔记] Golang 处理JSON

1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 ) 7 8 /* 9 10 GO类型和JSON类型的对应关系 11 • bool 代表 JSON booleans, 12 • float64 代表 JSON numbers, 13 • string 代表 JSON strings, 14 • nil 代表 JSON null. 15 16 三方开源库: 17 https://github.com/bit

[笔记] Golang String

1 package main 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 func main() { 10 // strings demo 11 Contains() 12 Join() 13 Index() 14 Repeat() 15 Replace() 16 Split() 17 18 // strconv demo 19 AppendDemo() 20 FormatDemo()

[笔记] Golang 处理XML

1. servers.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <servers version="1"> 3 <server> 4 <serverName>Shanghai_VPN</serverName> 5 <serverIP>127.0.0.1</serverIP> 6 </server> 7