| // Copyright 2012 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package template_test | |
| import ( | |
| "log" | |
| "os" | |
| "strings" | |
| "text/template" | |
| ) | |
| // This example demonstrates a custom function to process template text. | |
| // It installs the strings.Title function and uses it to | |
| // Make Title Text Look Good In Our Template's Output. | |
| func ExampleTemplate_func() { | |
| // First we create a FuncMap with which to register the function. | |
| funcMap := template.FuncMap{ | |
| // The name "title" is what the function will be called in the template text. | |
| "title": strings.Title, | |
| } | |
| // A simple template definition to test our function. | |
| // We print the input text several ways: | |
| // - the original | |
| // - title-cased | |
| // - title-cased and then printed with %q | |
| // - printed with %q and then title-cased. | |
| const templateText = ` | |
| Input: {{printf "%q" .}} | |
| Output 0: {{title .}} | |
| Output 1: {{title . | printf "%q"}} | |
| Output 2: {{printf "%q" . | title}} | |
| ` | |
| // Create a template, add the function map, and parse the text. | |
| tmpl, err := template.New("titleTest").Funcs(funcMap).Parse(templateText) | |
| if err != nil { | |
| log.Fatalf("parsing: %s", err) | |
| } | |
| // Run the template to verify the output. | |
| err = tmpl.Execute(os.Stdout, "the go programming language") | |
| if err != nil { | |
| log.Fatalf("execution: %s", err) | |
| } | |
| // Output: | |
| // Input: "the go programming language" | |
| // Output 0: The Go Programming Language | |
| // Output 1: "The Go Programming Language" | |
| // Output 2: "The Go Programming Language" | |
| } | |
| // This example demonstrates registering two custom template functions | |
| // and how to overwite one of the functions after the template has been | |
| // parsed. Overwriting can be used, for example, to alter the operation | |
| // of cloned templates. | |
| func ExampleTemplate_funcs() { | |
| // Define a simple template to test the functions. | |
| const tmpl = `{{ . | lower | repeat }}` | |
| // Define the template funcMap with two functions. | |
| var funcMap = template.FuncMap{ | |
| "lower": strings.ToLower, | |
| "repeat": func(s string) string { return strings.Repeat(s, 2) }, | |
| } | |
| // Define a New template, add the funcMap using Funcs and then Parse | |
| // the template. | |
| parsedTmpl, err := template.New("t").Funcs(funcMap).Parse(tmpl) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| if err := parsedTmpl.Execute(os.Stdout, "ABC\n"); err != nil { | |
| log.Fatal(err) | |
| } | |
| // [Funcs] must be called before a template is parsed to add | |
| // functions to the template. [Funcs] can also be used after a | |
| // template is parsed to overwrite template functions. | |
| // | |
| // Here the function identified by "repeat" is overwritten. | |
| parsedTmpl.Funcs(template.FuncMap{ | |
| "repeat": func(s string) string { return strings.Repeat(s, 3) }, | |
| }) | |
| if err := parsedTmpl.Execute(os.Stdout, "DEF\n"); err != nil { | |
| log.Fatal(err) | |
| } | |
| // Output: | |
| // abc | |
| // abc | |
| // def | |
| // def | |
| // def | |
| } | |
| // This example demonstrates how to use "if". | |
| func ExampleTemplate_if() { | |
| type book struct { | |
| Stars float32 | |
| Name string | |
| } | |
| tpl, err := template.New("book").Parse(`{{ if (gt .Stars 4.0) }}"{{.Name }}" is a great book.{{ else }}"{{.Name}}" is not a great book.{{ end }}`) | |
| if err != nil { | |
| log.Fatalf("failed to parse template: %s", err) | |
| } | |
| b := &book{ | |
| Stars: 4.9, | |
| Name: "Good Night, Gopher", | |
| } | |
| err = tpl.Execute(os.Stdout, b) | |
| if err != nil { | |
| log.Fatalf("failed to execute template: %s", err) | |
| } | |
| // Output: | |
| // "Good Night, Gopher" is a great book. | |
| } | |