github.com/linchen2chris/hugo@v0.0.0-20230307053224-cec209389705/tpl/internal/go_templates/texttemplate/example_test.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build go1.13
     6  // +build go1.13
     7  
     8  package template_test
     9  
    10  import (
    11  	"log"
    12  	"os"
    13  	"strings"
    14  	"text/template"
    15  )
    16  
    17  func ExampleTemplate() {
    18  	// Define a template.
    19  	const letter = `
    20  Dear {{.Name}},
    21  {{if .Attended}}
    22  It was a pleasure to see you at the wedding.
    23  {{- else}}
    24  It is a shame you couldn't make it to the wedding.
    25  {{- end}}
    26  {{with .Gift -}}
    27  Thank you for the lovely {{.}}.
    28  {{end}}
    29  Best wishes,
    30  Josie
    31  `
    32  
    33  	// Prepare some data to insert into the template.
    34  	type Recipient struct {
    35  		Name, Gift string
    36  		Attended   bool
    37  	}
    38  	var recipients = []Recipient{
    39  		{"Aunt Mildred", "bone china tea set", true},
    40  		{"Uncle John", "moleskin pants", false},
    41  		{"Cousin Rodney", "", false},
    42  	}
    43  
    44  	// Create a new template and parse the letter into it.
    45  	t := template.Must(template.New("letter").Parse(letter))
    46  
    47  	// Execute the template for each recipient.
    48  	for _, r := range recipients {
    49  		err := t.Execute(os.Stdout, r)
    50  		if err != nil {
    51  			log.Println("executing template:", err)
    52  		}
    53  	}
    54  
    55  	// Output:
    56  	// Dear Aunt Mildred,
    57  	//
    58  	// It was a pleasure to see you at the wedding.
    59  	// Thank you for the lovely bone china tea set.
    60  	//
    61  	// Best wishes,
    62  	// Josie
    63  	//
    64  	// Dear Uncle John,
    65  	//
    66  	// It is a shame you couldn't make it to the wedding.
    67  	// Thank you for the lovely moleskin pants.
    68  	//
    69  	// Best wishes,
    70  	// Josie
    71  	//
    72  	// Dear Cousin Rodney,
    73  	//
    74  	// It is a shame you couldn't make it to the wedding.
    75  	//
    76  	// Best wishes,
    77  	// Josie
    78  }
    79  
    80  // The following example is duplicated in html/template; keep them in sync.
    81  
    82  func ExampleTemplate_block() {
    83  	const (
    84  		master  = `Names:{{block "list" .}}{{"\n"}}{{range .}}{{println "-" .}}{{end}}{{end}}`
    85  		overlay = `{{define "list"}} {{join . ", "}}{{end}} `
    86  	)
    87  	var (
    88  		funcs     = template.FuncMap{"join": strings.Join}
    89  		guardians = []string{"Gamora", "Groot", "Nebula", "Rocket", "Star-Lord"}
    90  	)
    91  	masterTmpl, err := template.New("master").Funcs(funcs).Parse(master)
    92  	if err != nil {
    93  		log.Fatal(err)
    94  	}
    95  	overlayTmpl, err := template.Must(masterTmpl.Clone()).Parse(overlay)
    96  	if err != nil {
    97  		log.Fatal(err)
    98  	}
    99  	if err := masterTmpl.Execute(os.Stdout, guardians); err != nil {
   100  		log.Fatal(err)
   101  	}
   102  	if err := overlayTmpl.Execute(os.Stdout, guardians); err != nil {
   103  		log.Fatal(err)
   104  	}
   105  	// Output:
   106  	// Names:
   107  	// - Gamora
   108  	// - Groot
   109  	// - Nebula
   110  	// - Rocket
   111  	// - Star-Lord
   112  	// Names: Gamora, Groot, Nebula, Rocket, Star-Lord
   113  }