Source file
src/text/template/examplefiles_test.go
1
2
3
4
5 package template_test
6
7 import (
8 "io"
9 "io/ioutil"
10 "log"
11 "os"
12 "path/filepath"
13 "text/template"
14 )
15
16
17 type templateFile struct {
18 name string
19 contents string
20 }
21
22 func createTestDir(files []templateFile) string {
23 dir, err := ioutil.TempDir("", "template")
24 if err != nil {
25 log.Fatal(err)
26 }
27 for _, file := range files {
28 f, err := os.Create(filepath.Join(dir, file.name))
29 if err != nil {
30 log.Fatal(err)
31 }
32 defer f.Close()
33 _, err = io.WriteString(f, file.contents)
34 if err != nil {
35 log.Fatal(err)
36 }
37 }
38 return dir
39 }
40
41
42 func ExampleTemplate_glob() {
43
44
45
46 dir := createTestDir([]templateFile{
47
48 {"T0.tmpl", `T0 invokes T1: ({{template "T1"}})`},
49
50 {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`},
51
52 {"T2.tmpl", `{{define "T2"}}This is T2{{end}}`},
53 })
54
55 defer os.RemoveAll(dir)
56
57
58 pattern := filepath.Join(dir, "*.tmpl")
59
60
61
62
63 tmpl := template.Must(template.ParseGlob(pattern))
64
65 err := tmpl.Execute(os.Stdout, nil)
66 if err != nil {
67 log.Fatalf("template execution: %s", err)
68 }
69
70
71 }
72
73
74
75
76 func ExampleTemplate_helpers() {
77
78
79
80 dir := createTestDir([]templateFile{
81
82 {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`},
83
84 {"T2.tmpl", `{{define "T2"}}This is T2{{end}}`},
85 })
86
87 defer os.RemoveAll(dir)
88
89
90 pattern := filepath.Join(dir, "*.tmpl")
91
92
93
94 templates := template.Must(template.ParseGlob(pattern))
95
96 _, err := templates.Parse("{{define `driver1`}}Driver 1 calls T1: ({{template `T1`}})\n{{end}}")
97 if err != nil {
98 log.Fatal("parsing driver1: ", err)
99 }
100
101 _, err = templates.Parse("{{define `driver2`}}Driver 2 calls T2: ({{template `T2`}})\n{{end}}")
102 if err != nil {
103 log.Fatal("parsing driver2: ", err)
104 }
105
106
107 err = templates.ExecuteTemplate(os.Stdout, "driver1", nil)
108 if err != nil {
109 log.Fatalf("driver1 execution: %s", err)
110 }
111 err = templates.ExecuteTemplate(os.Stdout, "driver2", nil)
112 if err != nil {
113 log.Fatalf("driver2 execution: %s", err)
114 }
115
116
117
118 }
119
120
121
122 func ExampleTemplate_share() {
123
124
125
126 dir := createTestDir([]templateFile{
127
128 {"T0.tmpl", "T0 ({{.}} version) invokes T1: ({{template `T1`}})\n"},
129
130 {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`},
131 })
132
133 defer os.RemoveAll(dir)
134
135
136 pattern := filepath.Join(dir, "*.tmpl")
137
138
139
140 drivers := template.Must(template.ParseGlob(pattern))
141
142
143
144
145
146 first, err := drivers.Clone()
147 if err != nil {
148 log.Fatal("cloning helpers: ", err)
149 }
150
151 _, err = first.Parse("{{define `T2`}}T2, version A{{end}}")
152 if err != nil {
153 log.Fatal("parsing T2: ", err)
154 }
155
156
157
158 second, err := drivers.Clone()
159 if err != nil {
160 log.Fatal("cloning drivers: ", err)
161 }
162
163 _, err = second.Parse("{{define `T2`}}T2, version B{{end}}")
164 if err != nil {
165 log.Fatal("parsing T2: ", err)
166 }
167
168
169
170 err = second.ExecuteTemplate(os.Stdout, "T0.tmpl", "second")
171 if err != nil {
172 log.Fatalf("second execution: %s", err)
173 }
174 err = first.ExecuteTemplate(os.Stdout, "T0.tmpl", "first")
175 if err != nil {
176 log.Fatalf("first: execution: %s", err)
177 }
178
179
180
181
182 }
183
View as plain text